version 1.97.2.4, 2010/01/20 17:41:25
|
version 1.128, 2010/11/01 18:01:26
|
Line 47 sub modifystudent {
|
Line 47 sub modifystudent {
|
# this one. If $csec is defined, drop them from all other sections of |
# this one. If $csec is defined, drop them from all other sections of |
# this course and add them to section $csec |
# this course and add them to section $csec |
my ($cnum,$cdom) = &get_course_identity($courseid); |
my ($cnum,$cdom) = &get_course_identity($courseid); |
my %roles = &Apache::lonnet::dump('roles',$udom,$unam); |
my $extra = &Apache::lonnet::freeze_escape({'skipcheck' => 1}); |
|
my %roles = &Apache::lonnet::dump('roles',$udom,$unam,'.',undef,$extra); |
my ($tmp) = keys(%roles); |
my ($tmp) = keys(%roles); |
# Bail out if we were unable to get the students roles |
# Bail out if we were unable to get the students roles |
return "$1" if ($tmp =~ /^(con_lost|error|no_such_host)/i); |
return "$1" if ($tmp =~ /^(con_lost|error|no_such_host)/i); |
Line 91 sub modifyuserrole {
|
Line 92 sub modifyuserrole {
|
if ($setting eq 'course' || $context eq 'course') { |
if ($setting eq 'course' || $context eq 'course') { |
$scope = '/'.$cid; |
$scope = '/'.$cid; |
$scope =~ s/\_/\//g; |
$scope =~ s/\_/\//g; |
if ($role ne 'cc' && $sec ne '') { |
if (($role ne 'cc') && ($role ne 'co') && ($sec ne '')) { |
$scope .='/'.$sec; |
$scope .='/'.$sec; |
} |
} |
} elsif ($context eq 'domain') { |
} elsif ($context eq 'domain') { |
Line 236 sub domain_roles_select {
|
Line 237 sub domain_roles_select {
|
# |
# |
# Role types |
# Role types |
my @roletypes = ('domain','author','course','community'); |
my @roletypes = ('domain','author','course','community'); |
|
|
my %lt = &role_type_names(); |
my %lt = &role_type_names(); |
# |
# |
# build up the menu information to be passed to |
# build up the menu information to be passed to |
Line 248 sub domain_roles_select {
|
Line 248 sub domain_roles_select {
|
foreach my $roletype (@roletypes) { |
foreach my $roletype (@roletypes) { |
# set up the text for this domain |
# set up the text for this domain |
$select_menus{$roletype}->{'text'}= $lt{$roletype}; |
$select_menus{$roletype}->{'text'}= $lt{$roletype}; |
|
my $crstype; |
|
if ($roletype eq 'community') { |
|
$crstype = 'Community'; |
|
} |
# we want a choice of 'default' as the default in the second menu |
# we want a choice of 'default' as the default in the second menu |
if ($env{'form.roletype'} ne '') { |
if ($env{'form.roletype'} ne '') { |
$select_menus{$roletype}->{'default'} = $env{'form.showrole'}; |
$select_menus{$roletype}->{'default'} = $env{'form.showrole'}; |
Line 272 sub domain_roles_select {
|
Line 276 sub domain_roles_select {
|
&mt('Custom role'); |
&mt('Custom role'); |
} else { |
} else { |
$select_menus{$roletype}->{'select2'}->{$role} = |
$select_menus{$roletype}->{'select2'}->{$role} = |
&Apache::lonnet::plaintext($role); |
&Apache::lonnet::plaintext($role,$crstype); |
} |
} |
} |
} |
$select_menus{$roletype}->{'select2'}->{'Any'} = &mt('Any'); |
$select_menus{$roletype}->{'select2'}->{'Any'} = &mt('Any'); |
Line 292 sub hidden_input {
|
Line 296 sub hidden_input {
|
} |
} |
|
|
sub print_upload_manager_header { |
sub print_upload_manager_header { |
my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission)=@_; |
my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype, |
|
$can_assign)=@_; |
my $javascript; |
my $javascript; |
# |
# |
if (! exists($env{'form.upfile_associate'})) { |
if (! exists($env{'form.upfile_associate'})) { |
Line 306 sub print_upload_manager_header {
|
Line 311 sub print_upload_manager_header {
|
} |
} |
} |
} |
if ($env{'form.upfile_associate'} eq 'reverse') { |
if ($env{'form.upfile_associate'} eq 'reverse') { |
$javascript=&upload_manager_javascript_reverse_associate(); |
$javascript=&upload_manager_javascript_reverse_associate($can_assign); |
} else { |
} else { |
$javascript=&upload_manager_javascript_forward_associate(); |
$javascript=&upload_manager_javascript_forward_associate($can_assign); |
} |
} |
# |
# |
# Deal with restored settings |
# Deal with restored settings |
Line 329 sub print_upload_manager_header {
|
Line 334 sub print_upload_manager_header {
|
my $javascript_validations = |
my $javascript_validations = |
&javascript_validations('upload',$krbdefdom,$password_choice,undef, |
&javascript_validations('upload',$krbdefdom,$password_choice,undef, |
$env{'request.role.domain'},$context, |
$env{'request.role.domain'},$context, |
$groupslist); |
$groupslist,$crstype); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked"':''); |
my $checked=(($env{'form.noFirstLine'})?' checked="checked"':''); |
$r->print('<p>' |
$r->print('<p>' |
.&mt('Total number of records found in file: [_1]' |
.&mt('Total number of records found in file: [_1]' |
Line 362 sub print_upload_manager_header {
|
Line 367 sub print_upload_manager_header {
|
############################################################### |
############################################################### |
sub javascript_validations { |
sub javascript_validations { |
my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain, |
my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain, |
$context,$groupslist)=@_; |
$context,$groupslist,$crstype)=@_; |
my %param = ( |
my %param = ( |
kerb_def_dom => $krbdefdom, |
kerb_def_dom => $krbdefdom, |
curr_authtype => $curr_authtype, |
curr_authtype => $curr_authtype, |
Line 383 sub javascript_validations {
|
Line 388 sub javascript_validations {
|
if (($context eq 'course') || ($context eq 'domain')) { |
if (($context eq 'course') || ($context eq 'domain')) { |
if ($context eq 'course') { |
if ($context eq 'course') { |
if ($env{'request.course.sec'} eq '') { |
if ($env{'request.course.sec'} eq '') { |
$setsection_call = 'setSections(document.'.$param{'formname'}.');'; |
$setsection_call = 'setSections(document.'.$param{'formname'}.",'$crstype'".');'; |
$setsections_js = |
$setsections_js = |
&setsections_javascript($param{'formname'},$groupslist, |
&setsections_javascript($param{'formname'},$groupslist, |
$mode); |
$mode,'',$crstype); |
} else { |
} else { |
$setsection_call = "'ok'"; |
$setsection_call = "'ok'"; |
} |
} |
Line 582 END
|
Line 587 END
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub upload_manager_javascript_forward_associate { |
sub upload_manager_javascript_forward_associate { |
|
my ($can_assign) = @_; |
|
my $auth_update; |
|
if (ref($can_assign) eq 'HASH') { |
|
if (keys(%{$can_assign}) > 1) { |
|
$auth_update = <<"END"; |
|
// If we set the password, make the password form below correspond to |
|
// the new value. |
|
if (nw==9) { |
|
changed_radio('int',document.studentform); |
|
set_auth_radio_buttons('int',document.studentform); |
|
END |
|
} |
|
if ($can_assign->{'krb4'} || $can_assign->{'krb5'}) { |
|
$auth_update .= " vf.krbarg.value='';\n"; |
|
} |
|
if ($can_assign->{'int'}) { |
|
$auth_update .= " vf.intarg.value='';\n"; |
|
} |
|
if ($can_assign->{'loc'}) { |
|
$auth_update .= " vf.locarg.value='';\n"; |
|
} |
|
$auth_update .= " |
|
}\n"; |
|
} |
|
|
return(<<ENDPICK); |
return(<<ENDPICK); |
function verify(vf,sec_caller) { |
function verify(vf,sec_caller) { |
var founduname=0; |
var founduname=0; |
Line 658 function flip(vf,tf) {
|
Line 688 function flip(vf,tf) {
|
} |
} |
} |
} |
} |
} |
// If we set the password, make the password form below correspond to |
$auth_update |
// the new value. |
|
if (nw==9) { |
|
changed_radio('int',document.studentform); |
|
set_auth_radio_buttons('int',document.studentform); |
|
vf.intarg.value=''; |
|
vf.krbarg.value=''; |
|
vf.locarg.value=''; |
|
} |
|
} |
} |
|
|
function clearpwd(vf) { |
function clearpwd(vf) { |
Line 684 ENDPICK
|
Line 706 ENDPICK
|
############################################################### |
############################################################### |
############################################################### |
############################################################### |
sub upload_manager_javascript_reverse_associate { |
sub upload_manager_javascript_reverse_associate { |
|
my ($can_assign) = @_; |
|
my $auth_update; |
|
if (ref($can_assign) eq 'HASH') { |
|
if (keys(%{$can_assign}) > 1) { |
|
$auth_update = <<"END"; |
|
// initial password specified, pick internal authentication |
|
if (tf==8 && nw!=0) { |
|
changed_radio('int',document.studentform); |
|
set_auth_radio_buttons('int',document.studentform); |
|
END |
|
} |
|
if ($can_assign->{'krb'}) { |
|
$auth_update .= " vf.krbarg.value='';\n"; |
|
} |
|
if ($can_assign->{'int'}) { |
|
$auth_update .= " vf.intarg.value='';\n"; |
|
} |
|
if ($can_assign->{'loc'}) { |
|
$auth_update .= " vf.locarg.value='';\n"; |
|
} |
|
$auth_update .= " |
|
}\n"; |
|
} |
return(<<ENDPICK); |
return(<<ENDPICK); |
function verify(vf,sec_caller) { |
function verify(vf,sec_caller) { |
var founduname=0; |
var founduname=0; |
Line 723 function flip(vf,tf) {
|
Line 768 function flip(vf,tf) {
|
if ((tf>=2) && (tf<=5) && (nw!=0)) { |
if ((tf>=2) && (tf<=5) && (nw!=0)) { |
eval('vf.f1.selectedIndex=0;') |
eval('vf.f1.selectedIndex=0;') |
} |
} |
// intial password specified, pick internal authentication |
$auth_update |
if (tf==8 && nw!=0) { |
|
changed_radio('int',document.studentform); |
|
set_auth_radio_buttons('int',document.studentform); |
|
vf.krbarg.value=''; |
|
vf.intarg.value=''; |
|
vf.locarg.value=''; |
|
} |
|
} |
} |
|
|
function clearpwd(vf) { |
function clearpwd(vf) { |
Line 827 sub print_upload_manager_footer {
|
Line 865 sub print_upload_manager_footer {
|
.' '.&mt('Add a domain role').'</label>' |
.' '.&mt('Add a domain role').'</label>' |
.' <label>' |
.' <label>' |
.'<input type="radio" name="roleaction" value="course" />' |
.'<input type="radio" name="roleaction" value="course" />' |
.' '.&mt('Add a course role').'</label>' |
.' '.&mt('Add a course/community role').'</label>' |
.'</span>'; |
.'</span>'; |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
$Str .= &Apache::lonhtmlcommon::row_title( |
$Str .= &Apache::lonhtmlcommon::row_title( |
Line 896 sub print_upload_manager_footer {
|
Line 934 sub print_upload_manager_footer {
|
.'<hr />'; |
.'<hr />'; |
if ($context eq 'course') { |
if ($context eq 'course') { |
$Str .= '<p class="LC_info">' |
$Str .= '<p class="LC_info">' |
.&mt('Note: For large courses, this operation may be time consuming.') |
.&mt('Note: This operation may be time consuming when adding several users.') |
.'</p>'; |
.'</p>'; |
} |
} |
$Str .= '<p><input type="button"' |
$Str .= '<p><input type="button"' |
Line 975 sub print_upload_manager_form {
|
Line 1013 sub print_upload_manager_form {
|
my ($krbdef,$krbdefdom) = |
my ($krbdef,$krbdefdom) = |
&Apache::loncommon::get_kerberos_defaults($defdom); |
&Apache::loncommon::get_kerberos_defaults($defdom); |
# |
# |
|
my ($authnum,%can_assign) = &Apache::loncommon::get_assignable_auth($defdom); |
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context, |
&print_upload_manager_header($r,$datatoken,$distotal,$krbdefdom,$context, |
$permission); |
$permission,$crstype,\%can_assign); |
my $i; |
my $i; |
my $keyfields; |
my $keyfields; |
if ($total>=0) { |
if ($total>=0) { |
Line 1138 sub date_setting_table {
|
Line 1177 sub date_setting_table {
|
} |
} |
|
|
sub make_dates_default { |
sub make_dates_default { |
my ($startdate,$enddate,$context,$crstype = @_; |
my ($startdate,$enddate,$context,$crstype) = @_; |
my $result = ''; |
my $result = ''; |
if ($context eq 'course') { |
if ($context eq 'course') { |
my ($cnum,$cdom) = &get_course_identity(); |
my ($cnum,$cdom) = &get_course_identity(); |
Line 1173 sub default_role_selector {
|
Line 1212 sub default_role_selector {
|
my %customroles; |
my %customroles; |
my ($options,$coursepick,$cb_jscript); |
my ($options,$coursepick,$cb_jscript); |
if ($context ne 'author') { |
if ($context ne 'author') { |
%customroles = &my_custom_roles(); |
%customroles = &my_custom_roles($crstype); |
} |
} |
|
|
my %lt=&Apache::lonlocal::texthash( |
my %lt=&Apache::lonlocal::texthash( |
Line 1199 sub default_role_selector {
|
Line 1238 sub default_role_selector {
|
$options .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
$options .= ' <option value="'.$role.'">'.$plrole.'</option>'; |
} |
} |
my $courseform = &Apache::loncommon::selectcourse_link |
my $courseform = &Apache::loncommon::selectcourse_link |
('studentform','dccourse','dcdomain','coursedesc',"$env{'request.role.domain'}",undef,'Course'); |
('studentform','dccourse','dcdomain','coursedesc',"$env{'request.role.domain'}",undef,'Course/Community'); |
$cb_jscript = |
$cb_jscript = |
&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'currsec','studentform'); |
&Apache::loncommon::coursebrowser_javascript($env{'request.role.domain'},'currsec','studentform','courserole','Course/Community'); |
$coursepick = &Apache::loncommon::start_data_table(). |
$coursepick = &Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table_header_row(). |
&Apache::loncommon::start_data_table_header_row(). |
'<th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th>'. |
'<th>'.$courseform.'</th><th>'.$lt{'rol'}.'</th>'. |
'<th>'.$lt{'grs'}.'</th>'. |
'<th>'.$lt{'grs'}.'</th>'. |
&Apache::loncommon::end_data_table_header_row(). |
&Apache::loncommon::end_data_table_header_row(). |
&Apache::loncommon::start_data_table_row()."\n". |
&Apache::loncommon::start_data_table_row()."\n". |
'<td><input type="text" name="coursedesc" value="" onfocus="this.blur();opencrsbrowser('."'studentform','dccourse','dcdomain','coursedesc',''".')" /></td>'."\n". |
'<td><input type="text" name="coursedesc" value="" onfocus="this.blur();opencrsbrowser('."'studentform','dccourse','dcdomain','coursedesc','','','','crstype'".')" /></td>'."\n". |
'<td><select name="courserole">'."\n". |
'<td><select name="courserole">'."\n". |
&default_course_roles($context,$checkpriv,'Course',%customroles)."\n". |
&default_course_roles($context,$checkpriv,'Course',%customroles)."\n". |
'</select></td><td>'. |
'</select></td><td>'. |
Line 1226 sub default_role_selector {
|
Line 1265 sub default_role_selector {
|
$env{'request.role.domain'}.'" />'. |
$env{'request.role.domain'}.'" />'. |
'<input type="hidden" name="dccourse" value="" />'. |
'<input type="hidden" name="dccourse" value="" />'. |
'<input type="hidden" name="dcdomain" value="" />'. |
'<input type="hidden" name="dcdomain" value="" />'. |
|
'<input type="hidden" name="crstype" value="" />'. |
'</td></tr></table></td>'. |
'</td></tr></table></td>'. |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table_row(). |
&Apache::loncommon::end_data_table()."\n"; |
&Apache::loncommon::end_data_table()."\n"; |
Line 1291 sub domain_roles {
|
Line 1331 sub domain_roles {
|
|
|
sub course_roles { |
sub course_roles { |
my ($context,$checkpriv,$custom,$roletype) = @_; |
my ($context,$checkpriv,$custom,$roletype) = @_; |
my @allroles = &roles_by_context('course',$custom,$roletype); |
my $crstype; |
|
if ($roletype eq 'community') { |
|
$crstype = 'Community' ; |
|
} else { |
|
$crstype = 'Course'; |
|
} |
|
my @allroles = &roles_by_context('course',$custom,$crstype); |
my @roles; |
my @roles; |
if ($context eq 'domain') { |
if ($context eq 'domain') { |
@roles = @allroles; |
@roles = @allroles; |
Line 1340 sub curr_role_permissions {
|
Line 1386 sub curr_role_permissions {
|
# ======================================================= Existing Custom Roles |
# ======================================================= Existing Custom Roles |
|
|
sub my_custom_roles { |
sub my_custom_roles { |
|
my ($crstype) = @_; |
my %returnhash=(); |
my %returnhash=(); |
my %rolehash=&Apache::lonnet::dump('roles'); |
my %rolehash=&Apache::lonnet::dump('roles'); |
foreach my $key (keys %rolehash) { |
foreach my $key (keys(%rolehash)) { |
if ($key=~/^rolesdef\_(\w+)$/) { |
if ($key=~/^rolesdef\_(\w+)$/) { |
|
if ($crstype eq 'Community') { |
|
next if ($rolehash{$key} =~ /bre\&S/); |
|
} |
$returnhash{$1}=$1; |
$returnhash{$1}=$1; |
} |
} |
} |
} |
Line 1433 sub print_userlist {
|
Line 1483 sub print_userlist {
|
return; |
return; |
} |
} |
if (!(($context eq 'domain') && |
if (!(($context eq 'domain') && |
(($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) { |
(($env{'form.roletype'} eq 'course') || ($env{'form.roletype'} eq 'community')))) { |
$r->print(' '.&list_submit_button(&mt('Update Display')). |
$r->print( |
"\n</p>\n"); |
"\n</p>\n" |
|
.'<p>' |
|
.&list_submit_button(&mt('Update Display')) |
|
."</p>\n" |
|
); |
} |
} |
my ($indexhash,$keylist) = &make_keylist_array(); |
my ($indexhash,$keylist) = &make_keylist_array(); |
my (%userlist,%userinfo,$clearcoursepick); |
my (%userlist,%userinfo,$clearcoursepick); |
if (($context eq 'domain') && |
if (($context eq 'domain') && |
($env{'form.roletype'} eq 'course') || |
($env{'form.roletype'} eq 'course') || |
($env{'form.roletype'} eq 'community')) { |
($env{'form.roletype'} eq 'community')) { |
my ($crstype,$numcodes,$title,$warning); |
my ($crstype,$numcodes,$title,$warning); |
if ($env{'form.roletype'} eq 'course') { |
if ($env{'form.roletype'} eq 'course') { |
Line 1454 sub print_userlist {
|
Line 1508 sub print_userlist {
|
$title = &mt('Select Communities'); |
$title = &mt('Select Communities'); |
$warning = &mt('Warning: data retrieval for multiple communities can take considerable time, as this operation is not currently optimized.'); |
$warning = &mt('Warning: data retrieval for multiple communities can take considerable time, as this operation is not currently optimized.'); |
} |
} |
|
my @standardnames = &Apache::loncommon::get_standard_codeitems(); |
my $courseform = |
my $courseform = |
&Apache::lonhtmlcommon::course_selection($formname,$numcodes, |
&Apache::lonhtmlcommon::course_selection($formname,$numcodes, |
$codetitles,$idlist,$idlist_titles,$crstype); |
$codetitles,$idlist,$idlist_titles,$crstype, |
|
\@standardnames); |
$r->print('<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n". |
$r->print('<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n". |
&Apache::lonhtmlcommon::start_pick_box()."\n". |
&Apache::lonhtmlcommon::start_pick_box()."\n". |
&Apache::lonhtmlcommon::row_title($title,'LC_oddrow_value')."\n". |
&Apache::lonhtmlcommon::row_title($title,'LC_oddrow_value')."\n". |
Line 1544 sub print_userlist {
|
Line 1600 sub print_userlist {
|
} |
} |
} |
} |
} |
} |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif (($env{'form.roletype'} eq 'course') || |
|
($env{'form.roletype'} eq 'community')) { |
if (($env{'form.coursepick'}) && (!$clearcoursepick)) { |
if (($env{'form.coursepick'}) && (!$clearcoursepick)) { |
my %courses = &process_coursepick(); |
my %courses = &process_coursepick(); |
my %allusers; |
my %allusers; |
Line 1673 sub role_filter {
|
Line 1730 sub role_filter {
|
$role_select .= '</select>'; |
$role_select .= '</select>'; |
$output = '<label><span class="LC_nobreak">' |
$output = '<label><span class="LC_nobreak">' |
.&mt('Role: [_1]',$role_select) |
.&mt('Role: [_1]',$role_select) |
.'</span></label>'; |
.'</span></label> '; |
} |
} |
return $output; |
return $output; |
} |
} |
Line 1702 sub section_group_filter {
|
Line 1759 sub section_group_filter {
|
$env{'form.'.$name{$item}} = 'all'; |
$env{'form.'.$name{$item}} = 'all'; |
} |
} |
if ($item eq 'sec') { |
if ($item eq 'sec') { |
if ($env{'form.showrole'} eq 'cc') { |
if (($env{'form.showrole'} eq 'cc') || ($env{'form.showrole'} eq 'co')) { |
$env{'form.'.$name{$item}} = 'none'; |
$env{'form.'.$name{$item}} = 'none'; |
} |
} |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
Line 1713 sub section_group_filter {
|
Line 1770 sub section_group_filter {
|
} |
} |
if (@options > 0) { |
if (@options > 0) { |
my $currsel; |
my $currsel; |
$markup = '<select name="'.$name{$item}.'" />'."\n"; |
$markup = '<select name="'.$name{$item}.'">'."\n"; |
foreach my $option ('all','none',@options) { |
foreach my $option ('all','none',@options) { |
$currsel = ''; |
$currsel = ''; |
if ($env{'form.'.$name{$item}} eq $option) { |
if ($env{'form.'.$name{$item}} eq $option) { |
Line 1728 sub section_group_filter {
|
Line 1785 sub section_group_filter {
|
$markup .= '</option>'."\n"; |
$markup .= '</option>'."\n"; |
} |
} |
$markup .= '</select>'."\n"; |
$markup .= '</select>'."\n"; |
$output .= (' 'x3).'<label>'.$title{$item}.': '.$markup.'</label>'; |
$output .= (' 'x3).'<span class="LC_nobreak">' |
|
.'<label>'.$title{$item}.': '.$markup.'</label>' |
|
.'</span> '; |
} |
} |
} |
} |
return $output; |
return $output; |
Line 1781 sub gather_userinfo {
|
Line 1840 sub gather_userinfo {
|
$indexhash,$uniqid,$userlist); |
$indexhash,$uniqid,$userlist); |
} |
} |
} |
} |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif (($env{'form.roletype'} eq 'course') || |
|
($env{'form.roletype'} eq 'community')) { |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = |
($userdata{'username'},$userdata{'domain'},$userdata{'role'}) = |
split(/:/,$item); |
split(/:/,$item); |
if (ref($rolehash->{$item}) eq 'HASH') { |
if (ref($rolehash->{$item}) eq 'HASH') { |
Line 1831 sub gather_userinfo {
|
Line 1891 sub gather_userinfo {
|
sub build_user_record { |
sub build_user_record { |
my ($context,$userdata,$userinfo,$indexhash,$record_key,$userlist) = @_; |
my ($context,$userdata,$userinfo,$indexhash,$record_key,$userlist) = @_; |
next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1'); |
next if ($userdata->{'start'} eq '-1' && $userdata->{'end'} eq '-1'); |
if (!(($context eq 'domain') && ($env{'form.roletype'} eq 'course'))) { |
if (!(($context eq 'domain') && (($env{'form.roletype'} eq 'course') |
|
&& ($env{'form.roletype'} eq 'community')))) { |
&process_date_info($userdata); |
&process_date_info($userdata); |
} |
} |
my $username = $userdata->{'username'}; |
my $username = $userdata->{'username'}; |
Line 1900 function setCourseCat(formname) {
|
Line 1961 function setCourseCat(formname) {
|
if (formname.Year.options[formname.Year.selectedIndex].value == -1) { |
if (formname.Year.options[formname.Year.selectedIndex].value == -1) { |
return; |
return; |
} |
} |
courseSet('Year'); |
courseSet('$codetitles[0]'); |
for (var j=0; j<formname.Semester.length; j++) { |
for (var j=0; j<formname.Semester.length; j++) { |
if (formname.Semester.options[j].value == "$env{'form.Semester'}") { |
if (formname.Semester.options[j].value == "$env{'form.Semester'}") { |
formname.Semester.options[j].selected = true; |
formname.Semester.options[j].selected = true; |
Line 1909 function setCourseCat(formname) {
|
Line 1970 function setCourseCat(formname) {
|
if (formname.Semester.options[formname.Semester.selectedIndex].value == -1) { |
if (formname.Semester.options[formname.Semester.selectedIndex].value == -1) { |
return; |
return; |
} |
} |
courseSet('Semester'); |
courseSet('$codetitles[1]'); |
for (var j=0; j<formname.Department.length; j++) { |
for (var j=0; j<formname.Department.length; j++) { |
if (formname.Department.options[j].value == "$env{'form.Department'}") { formname.Department.options[j].selected = true; |
if (formname.Department.options[j].value == "$env{'form.Department'}") { formname.Department.options[j].selected = true; |
} |
} |
Line 1917 function setCourseCat(formname) {
|
Line 1978 function setCourseCat(formname) {
|
if (formname.Department.options[formname.Department.selectedIndex].value == -1) { |
if (formname.Department.options[formname.Department.selectedIndex].value == -1) { |
return; |
return; |
} |
} |
courseSet('Department'); |
courseSet('$codetitles[2]'); |
for (var j=0; j<formname.Number.length; j++) { |
for (var j=0; j<formname.Number.length; j++) { |
if (formname.Number.options[j].value == "$env{'form.Number'}") { |
if (formname.Number.options[j].value == "$env{'form.Number'}") { |
formname.Number.options[j].selected = true; |
formname.Number.options[j].selected = true; |
Line 1946 sub process_coursepick {
|
Line 2007 sub process_coursepick {
|
my $coursefilter = $env{'form.coursepick'}; |
my $coursefilter = $env{'form.coursepick'}; |
my $cdom = $env{'request.role.domain'}; |
my $cdom = $env{'request.role.domain'}; |
my %courses; |
my %courses; |
|
my $crssrch = 'Course'; |
|
if ($env{'form.roletype'} eq 'community') { |
|
$crssrch = 'Community'; |
|
} |
if ($coursefilter eq 'all') { |
if ($coursefilter eq 'all') { |
%courses = &Apache::lonnet::courseiddump($cdom,'.','.','.','.','.', |
%courses = &Apache::lonnet::courseiddump($cdom,'.','.','.','.','.', |
undef,undef,'Course'); |
undef,undef,$crssrch); |
} elsif ($coursefilter eq 'category') { |
} elsif ($coursefilter eq 'category') { |
my $instcode = &instcode_from_coursefilter(); |
my $instcode = &instcode_from_coursefilter(); |
%courses = &Apache::lonnet::courseiddump($cdom,'.','.',$instcode,'.','.', |
%courses = &Apache::lonnet::courseiddump($cdom,'.','.',$instcode,'.','.', |
undef,undef,'Course'); |
undef,undef,$crssrch); |
} elsif ($coursefilter eq 'specific') { |
} elsif ($coursefilter eq 'specific') { |
if ($env{'form.coursetotal'} > 1) { |
if ($env{'form.coursetotal'} > 1) { |
my @course_ids = split(/&&/,$env{'form.courselist'}); |
my @course_ids = split(/&&/,$env{'form.courselist'}); |
Line 2134 function photowindow(photolink) {
|
Line 2199 function photowindow(photolink) {
|
<input type="hidden" name="displayclickers" value="$displayclickers" /> |
<input type="hidden" name="displayclickers" value="$displayclickers" /> |
END |
END |
} |
} |
|
} elsif ($context eq 'domain') { |
|
if ($setting eq 'community') { |
|
$crstype = 'Community'; |
|
} elsif ($setting eq 'course') { |
|
$crstype = 'Course'; |
|
} |
} |
} |
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { |
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
my $check_uncheck_js = &Apache::loncommon::check_uncheck_jscript(); |
Line 2230 END
|
Line 2301 END
|
); |
); |
if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { |
if ($context eq 'domain' && $env{'form.roletype'} eq 'course') { |
$lt{'extent'} = &mt('Course(s): description, section(s), status'); |
$lt{'extent'} = &mt('Course(s): description, section(s), status'); |
|
} elsif ($context eq 'domain' && $env{'form.roletype'} eq 'community') { |
|
$lt{'extent'} = &mt('Communities: description, section(s), status'); |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
$lt{'extent'} = &mt('Author'); |
$lt{'extent'} = &mt('Author'); |
} |
} |
Line 2241 END
|
Line 2314 END
|
if ($context eq 'course') { |
if ($context eq 'course') { |
push(@cols,'section'); |
push(@cols,'section'); |
} |
} |
if (!($context eq 'domain' && $env{'form.roletype'} eq 'course')) { |
if (!($context eq 'domain' && ($env{'form.roletype'} eq 'course') |
|
&& ($env{'form.roletype'} eq 'community'))) { |
push(@cols,('start','end')); |
push(@cols,('start','end')); |
} |
} |
if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { |
if ($env{'form.showrole'} eq 'Any' || $env{'form.showrole'} eq 'cr') { |
push(@cols,'role'); |
push(@cols,'role'); |
} |
} |
if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || |
if ($context eq 'domain' && ($env{'form.roletype'} eq 'author' || |
$env{'form.roletype'} eq 'course')) { |
$env{'form.roletype'} eq 'course' || |
|
$env{'form.roletype'} eq 'community')) { |
push (@cols,'extent'); |
push (@cols,'extent'); |
} |
} |
if (($statusmode eq 'Any') && |
if (($statusmode eq 'Any') && |
(!($context eq 'domain' && $env{'form.roletype'} eq 'course'))) { |
(!($context eq 'domain' && (($env{'form.roletype'} eq 'course') |
|
|| ($env{'form.roletype'} eq 'community'))))) { |
push(@cols,'status'); |
push(@cols,'status'); |
} |
} |
if ($context eq 'course') { |
if ($context eq 'course') { |
Line 2265 END
|
Line 2341 END
|
if ($env{'form.showrole'} eq 'cr') { |
if ($env{'form.showrole'} eq 'cr') { |
$rolefilter = &mt('custom'); |
$rolefilter = &mt('custom'); |
} elsif ($env{'form.showrole'} ne 'Any') { |
} elsif ($env{'form.showrole'} ne 'Any') { |
$rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'}); |
$rolefilter = &Apache::lonnet::plaintext($env{'form.showrole'},$crstype); |
} |
} |
my $results_description; |
my $results_description; |
if ($mode ne 'autoenroll') { |
if ($mode ne 'autoenroll') { |
$results_description = &results_header_row($rolefilter,$statusmode, |
$results_description = &results_header_row($rolefilter,$statusmode, |
$context,$permission,$mode); |
$context,$permission,$mode,$crstype); |
$r->print('<b>'.$results_description.'</b><br /><br />'); |
$r->print('<b>'.$results_description.'</b><br /><br />'); |
} |
} |
my ($output,$actionselect,%canchange,%canchangesec); |
my ($output,$actionselect,%canchange,%canchangesec); |
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { |
if ($mode eq 'html' || $mode eq 'view' || $mode eq 'autoenroll' || $mode eq 'pickauthor') { |
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { |
if ($mode ne 'autoenroll' && $mode ne 'pickauthor') { |
if ($permission->{'cusr'}) { |
if ($permission->{'cusr'}) { |
$actionselect = &select_actions($context,$setting,$statusmode,$formname); |
unless (($context eq 'domain') && |
|
(($setting eq 'course') || ($setting eq 'community'))) { |
|
$actionselect = |
|
&select_actions($context,$setting,$statusmode,$formname); |
|
} |
} |
} |
$r->print(<<END); |
$r->print(<<END); |
<input type="hidden" name="srchby" value="uname" /> |
<input type="hidden" name="srchby" value="uname" /> |
Line 2288 END
|
Line 2368 END
|
END |
END |
if ($actionselect) { |
if ($actionselect) { |
$output .= <<"END"; |
$output .= <<"END"; |
<div class="LC_left_float"><fieldset><legend><b>$lt{'ac'}</b></legend> |
<div class="LC_left_float"><fieldset><legend>$lt{'ac'}</legend> |
$actionselect |
$actionselect |
<br/><br /><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.$formname.actionlist)" /> |
<br/><br /><input type="button" value="$lt{'ca'}" onclick="javascript:checkAll(document.$formname.actionlist)" /> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.$formname.actionlist)" /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action('actionlist')" /></fieldset></div> |
<input type="button" value="$lt{'ua'}" onclick="javascript:uncheckAll(document.$formname.actionlist)" /><br /><input type="button" value="$lt{'pr'}" onclick="javascript:verify_action('actionlist')" /></fieldset></div> |
Line 2333 END
|
Line 2413 END
|
} |
} |
} |
} |
} |
} |
$output .= '<div class="LC_left_float"><fieldset><legend><b>'.$lt{'link'}.'</b></legend>'. |
$output .= '<div class="LC_left_float"><fieldset><legend>'.$lt{'link'}.'</legend>'. |
'<table><tr>'; |
'<table><tr>'; |
my @linkdests = ('aboutme'); |
my @linkdests = ('aboutme'); |
if ($permission->{'cusr'}) { |
if ($permission->{'cusr'}) { |
Line 2344 END
|
Line 2424 END
|
$env{'request.course.sec'})) { |
$env{'request.course.sec'})) { |
push(@linkdests,'track'); |
push(@linkdests,'track'); |
} |
} |
|
|
$output .= '<td>'; |
$output .= '<td>'; |
my $usernamelink = $env{'form.usernamelink'}; |
my $usernamelink = $env{'form.usernamelink'}; |
if ($usernamelink eq '') { |
if ($usernamelink eq '') { |
Line 2360 END
|
Line 2441 END
|
if ($env{'form.userwin'}) { |
if ($env{'form.userwin'}) { |
$checkwin = ' checked="checked"'; |
$checkwin = ' checked="checked"'; |
} |
} |
$output .= '</td><td valign="top"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>'; |
$output .= '</td><td valign="top" style="border-left: 1px solid;"><span class="LC_nobreak"><input type="checkbox" name="userwin" value="1"'.$checkwin.' />'.$lt{'owin'}.'</span></td></tr></table></fieldset></div>'; |
} |
} |
$output .= "\n".'<div class="LC_clear_float_footer"> </div>'."\n". |
$output .= "\n".'<div class="LC_clear_float_footer"> </div>'."\n". |
&Apache::loncommon::start_data_table(). |
&Apache::loncommon::start_data_table(). |
Line 2370 END
|
Line 2451 END
|
<th><a href=\"javascript:document.$formname.sortby.value='type';document.$formname.submit();\">$lt{'type'}</a></th> |
<th><a href=\"javascript:document.$formname.sortby.value='type';document.$formname.submit();\">$lt{'type'}</a></th> |
"; |
"; |
} else { |
} else { |
if ($mode eq 'pickauthor') { |
$output .= "\n".'<th> </th>'."\n"; |
$output .= "\n".'<th> </th>'."\n"; |
|
} else { |
|
$output .= "\n".'<th>'.&mt('Count').'</th>'."\n"; |
|
} |
|
if ($actionselect) { |
if ($actionselect) { |
$output .= '<th>'.&mt('Select').'</th>'."\n"; |
$output .= '<th>'.&mt('Select').'</th>'."\n"; |
} |
} |
Line 2429 END
|
Line 2506 END
|
time.'_'.rand(1000000000).'.csv'; |
time.'_'.rand(1000000000).'.csv'; |
unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { |
unless ($CSVfile = Apache::File->new('>/home/httpd'.$CSVfilename)) { |
$r->log_error("Couldn't open $CSVfilename for output $!"); |
$r->log_error("Couldn't open $CSVfilename for output $!"); |
$r->print(&mt('Problems occurred in writing the CSV file. ' |
$r->print( |
.'This error has been logged. ' |
'<p class="LC_error">' |
.'Please alert your LON-CAPA administrator.')); |
.&mt('Problems occurred in writing the CSV file.') |
|
.' '.&mt('This error has been logged.') |
|
.' '.&mt('Please alert your LON-CAPA administrator.') |
|
.'</p>' |
|
); |
$CSVfile = undef; |
$CSVfile = undef; |
} |
} |
# |
# |
Line 2505 END
|
Line 2586 END
|
} |
} |
} elsif ($env{'form.roletype'} eq 'author') { |
} elsif ($env{'form.roletype'} eq 'author') { |
($uname,$udom,$role) = split(/:/,$user,-1); |
($uname,$udom,$role) = split(/:/,$user,-1); |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif (($env{'form.roletype'} eq 'course') || |
|
($env{'form.roletype'} eq 'community')) { |
($uname,$udom,$role) = split(/:/,$user); |
($uname,$udom,$role) = split(/:/,$user); |
} |
} |
} else { |
} else { |
Line 2612 END
|
Line 2694 END
|
if ($clickers!~/\w/) { $clickers='-'; } |
if ($clickers!~/\w/) { $clickers='-'; } |
$in{'clicker'} = $clickers; |
$in{'clicker'} = $clickers; |
my $role = $in{'role'}; |
my $role = $in{'role'}; |
$in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype); |
$in{'role'}=&Apache::lonnet::plaintext($sdata->[$index{'role'}],$crstype); |
if (! defined($in{'start'}) || $in{'start'} == 0) { |
if (! defined($in{'start'}) || $in{'start'} == 0) { |
$in{'start'} = &mt('none'); |
$in{'start'} = &mt('none'); |
} else { |
} else { |
Line 2899 sub print_username_link {
|
Line 2981 sub print_username_link {
|
$output = $in->{'username'}; |
$output = $in->{'username'}; |
} else { |
} else { |
$output = '<a href="javascript:username_display_launch('. |
$output = '<a href="javascript:username_display_launch('. |
"'$in->{'username'}','$in->{'domain'}'".')" />'. |
"'$in->{'username'}','$in->{'domain'}'".')">'. |
$in->{'username'}.'</a>'; |
$in->{'username'}.'</a>'; |
} |
} |
return $output; |
return $output; |
Line 2911 sub role_type_names {
|
Line 2993 sub role_type_names {
|
'author' => 'Co-Author Roles', |
'author' => 'Co-Author Roles', |
'course' => 'Course Roles', |
'course' => 'Course Roles', |
'community' => 'Community Roles', |
'community' => 'Community Roles', |
|
|
); |
); |
return %lt; |
return %lt; |
} |
} |
Line 3073 END
|
Line 3154 END
|
} else { |
} else { |
opener.document.$callingform.retainsec.value = formname.retainsec.value; |
opener.document.$callingform.retainsec.value = formname.retainsec.value; |
} |
} |
setSections(formname); |
setSections(formname,'$crstype'); |
if (seccheck == 'ok') { |
if (seccheck == 'ok') { |
opener.document.$callingform.newsecs.value = formname.sections.value; |
opener.document.$callingform.newsecs.value = formname.sections.value; |
} |
} |
Line 3130 ENDJS
|
Line 3211 ENDJS
|
my %lt = &Apache::lonlocal::texthash ( |
my %lt = &Apache::lonlocal::texthash ( |
chac => 'Access dates to apply for selected users', |
chac => 'Access dates to apply for selected users', |
chse => 'Changes in section affiliation to apply to selected users', |
chse => 'Changes in section affiliation to apply to selected users', |
fors => 'For student roles changing the section, will result in a section switch as students may only be in one section of a course at a time.', |
fors => 'For student roles, changing the section will result in a section switch as students may only be in one section of a course at a time.', |
forn => 'For a role in a course that is not a student role, a user may have roles in more than one section of a course at a time.', |
forn => 'For a course role that is not "student", users may have roles in more than one section at a time.', |
reta => "Retain each user's current section affiliations?", |
reta => "Retain each user's current section affiliations?", |
dnap => '(Does not apply to student roles).', |
dnap => '(Does not apply to student roles).', |
); |
); |
my ($date_items,$headertext); |
my ($date_items,$headertext); |
if ($env{'form.bulkaction'} eq 'chgsec') { |
if ($env{'form.bulkaction'} eq 'chgsec') { |
Line 3150 ENDJS
|
Line 3231 ENDJS
|
$permission,$crstype); |
$permission,$crstype); |
} |
} |
$output .= '<h3>'.$headertext.'</h3>'. |
$output .= '<h3>'.$headertext.'</h3>'. |
'<form name="'.$formname.'" method="post">'."\n". |
'<form name="'.$formname.'" method="post" action="">'."\n". |
$date_items; |
$date_items; |
if ($context eq 'course' && $env{'form.bulkaction'} eq 'chgsec') { |
if ($context eq 'course' && $env{'form.bulkaction'} eq 'chgsec') { |
my ($cnum,$cdom) = &get_course_identity(); |
my ($cnum,$cdom) = &get_course_identity(); |
|
if ($crstype eq 'Community') { |
|
$lt{'fors'} = &mt('For member roles, changing the section will result in a section switch, as members may only be in one section of a community at a time.'); |
|
$lt{'forn'} = &mt('For a community role that is not "member", users may have roles in more than one section at a time.'); |
|
$lt{'dnap'} = &mt('(Does not apply to member roles).'); |
|
} |
my $info; |
my $info; |
if ($env{'form.showrole'} eq 'st') { |
if ($env{'form.showrole'} eq 'st') { |
$output .= '<p>'.$lt{'fors'}.'</p>'; |
$output .= '<p>'.$lt{'fors'}.'</p>'; |
Line 3192 sub section_picker {
|
Line 3278 sub section_picker {
|
my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype) = @_; |
my ($cdom,$cnum,$role,$rowtitle,$permission,$context,$mode,$crstype) = @_; |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
my %sections_count = &Apache::loncommon::get_sections($cdom,$cnum); |
my $sections_select .= &course_sections(\%sections_count,$role); |
my $sections_select .= &course_sections(\%sections_count,$role); |
my $secbox = '<p>'.&Apache::lonhtmlcommon::start_pick_box()."\n"; |
my $secbox = '<div>'.&Apache::lonhtmlcommon::start_pick_box()."\n"; |
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
my ($options,$cb_script,$coursepick) = |
my ($options,$cb_script,$coursepick) = |
&default_role_selector($context,1,$crstype); |
&default_role_selector($context,1,$crstype); |
Line 3205 sub section_picker {
|
Line 3291 sub section_picker {
|
'<td align="center">'.&mt('Existing sections')."\n". |
'<td align="center">'.&mt('Existing sections')."\n". |
'<br />'.$sections_select.'</td><td align="center">'. |
'<br />'.$sections_select.'</td><td align="center">'. |
&mt('New section').'<br />'."\n". |
&mt('New section').'<br />'."\n". |
'<input type="text" name="newsec" size="15" />'."\n". |
'<input type="text" name="newsec" size="15" value="" />'."\n". |
'<input type="hidden" name="sections" value="" />'."\n". |
'<input type="hidden" name="sections" value="" />'."\n". |
'</td></tr></table>'."\n"; |
'</td></tr></table>'."\n"; |
} else { |
} else { |
Line 3214 sub section_picker {
|
Line 3300 sub section_picker {
|
$env{'request.course.sec'}; |
$env{'request.course.sec'}; |
} |
} |
$secbox .= &Apache::lonhtmlcommon::row_closure(1)."\n". |
$secbox .= &Apache::lonhtmlcommon::row_closure(1)."\n". |
&Apache::lonhtmlcommon::end_pick_box().'</p>'; |
&Apache::lonhtmlcommon::end_pick_box().'</div>'; |
return $secbox; |
return $secbox; |
} |
} |
|
|
sub results_header_row { |
sub results_header_row { |
my ($rolefilter,$statusmode,$context,$permission,$mode) = @_; |
my ($rolefilter,$statusmode,$context,$permission,$mode,$crstype) = @_; |
my ($description,$showfilter); |
my ($description,$showfilter); |
if ($rolefilter ne 'Any') { |
if ($rolefilter ne 'Any') { |
$showfilter = $rolefilter; |
$showfilter = $rolefilter; |
} |
} |
if ($context eq 'course') { |
if ($context eq 'course') { |
if ($mode eq 'csv' || $mode eq 'excel') { |
if ($mode eq 'csv' || $mode eq 'excel') { |
$description = &mt('Course - [_1]:',$env{'course.'.$env{'request.course.id'}.'.description'}).' '; |
if ($crstype eq 'Community') { |
|
$description = &mt('Community - [_1]:',$env{'course.'.$env{'request.course.id'}.'.description'}).' '; |
|
} else { |
|
$description = &mt('Course - [_1]:',$env{'course.'.$env{'request.course.id'}.'.description'}).' '; |
|
} |
} |
} |
if ($statusmode eq 'Expired') { |
if ($statusmode eq 'Expired') { |
$description .= &mt('Users in course with expired [_1] roles',$showfilter); |
if ($crstype eq 'Community') { |
|
$description .= &mt('Users in community with expired [_1] roles',$showfilter); |
|
} else { |
|
$description .= &mt('Users in course with expired [_1] roles',$showfilter); |
|
} |
} elsif ($statusmode eq 'Future') { |
} elsif ($statusmode eq 'Future') { |
$description .= &mt('Users in course with future [_1] roles',$showfilter); |
if ($crstype eq 'Community') { |
|
$description .= &mt('Users in community with future [_1] roles',$showfilter); |
|
} else { |
|
$description .= &mt('Users in course with future [_1] roles',$showfilter); |
|
} |
} elsif ($statusmode eq 'Active') { |
} elsif ($statusmode eq 'Active') { |
$description .= &mt('Users in course with active [_1] roles',$showfilter); |
if ($crstype eq 'Community') { |
|
$description .= &mt('Users in community with active [_1] roles',$showfilter); |
|
} else { |
|
$description .= &mt('Users in course with active [_1] roles',$showfilter); |
|
} |
} else { |
} else { |
if ($rolefilter eq 'Any') { |
if ($rolefilter eq 'Any') { |
$description .= &mt('All users in course'); |
if ($crstype eq 'Community') { |
|
$description .= &mt('All users in community'); |
|
} else { |
|
$description .= &mt('All users in course'); |
|
} |
} else { |
} else { |
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
if ($crstype eq 'Community') { |
|
$description .= &mt('All users in community with [_1] roles',$rolefilter); |
|
} else { |
|
$description .= &mt('All users in course with [_1] roles',$rolefilter); |
|
} |
} |
} |
} |
} |
my $constraint; |
my $constraint; |
Line 3246 sub results_header_row {
|
Line 3356 sub results_header_row {
|
if ($viewablesec ne '') { |
if ($viewablesec ne '') { |
if ($env{'form.showrole'} eq 'st') { |
if ($env{'form.showrole'} eq 'st') { |
$constraint = &mt('only users in section "[_1]"',$viewablesec); |
$constraint = &mt('only users in section "[_1]"',$viewablesec); |
} elsif ($env{'form.showrole'} ne 'cc') { |
} elsif (($env{'form.showrole'} ne 'cc') && ($env{'form.showrole'} ne 'co')) { |
$constraint = &mt('only users affiliated with no section or section "[_1]"',$viewablesec); |
$constraint = &mt('only users affiliated with no section or section "[_1]"',$viewablesec); |
} |
} |
if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) { |
if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) { |
Line 3331 sub results_header_row {
|
Line 3441 sub results_header_row {
|
if ($rolefilter eq 'Any') { |
if ($rolefilter eq 'Any') { |
$description .= &mt('All users with co-author roles in domain',$showfilter); |
$description .= &mt('All users with co-author roles in domain',$showfilter); |
} else { |
} else { |
$description .= &mt('All co-authors in domain with [_1] roles',$rolefilter); |
$description .= &mt('All co-authors in domain with [_1] roles',$rolefilter); |
} |
} |
} |
} |
} elsif ($env{'form.roletype'} eq 'course') { |
} elsif (($env{'form.roletype'} eq 'course') || |
|
($env{'form.roletype'} eq 'community')) { |
my $coursefilter = $env{'form.coursepick'}; |
my $coursefilter = $env{'form.coursepick'}; |
if ($coursefilter eq 'category') { |
if ($env{'form.roletype'} eq 'course') { |
my $instcode = &instcode_from_coursefilter(); |
if ($coursefilter eq 'category') { |
if ($instcode eq '.') { |
my $instcode = &instcode_from_coursefilter(); |
|
if ($instcode eq '.') { |
|
$description .= &mt('All courses in domain').' - '; |
|
} else { |
|
$description .= &mt('Courses in domain with institutional code: [_1]',$instcode).' - '; |
|
} |
|
} elsif ($coursefilter eq 'selected') { |
|
$description .= &mt('Selected courses in domain').' - '; |
|
} elsif ($coursefilter eq 'all') { |
$description .= &mt('All courses in domain').' - '; |
$description .= &mt('All courses in domain').' - '; |
} else { |
|
$description .= &mt('Courses in domain with institutional code: [_1]',$instcode).' - '; |
|
} |
} |
} elsif ($coursefilter eq 'selected') { |
} elsif ($env{'form.roletype'} eq 'community') { |
$description .= &mt('Selected courses in domain').' - '; |
if ($coursefilter eq 'selected') { |
} elsif ($coursefilter eq 'all') { |
$description .= &mt('Selected communities in domain').' - '; |
$description .= &mt('All courses in domain').' - '; |
} elsif ($coursefilter eq 'all') { |
|
$description .= &mt('All communities in domain').' - '; |
|
} |
} |
} |
if ($statusmode eq 'Expired') { |
if ($statusmode eq 'Expired') { |
$description .= &mt('users with expired [_1] roles',$showfilter); |
$description .= &mt('users with expired [_1] roles',$showfilter); |
Line 3579 sub print_first_users_upload_form {
|
Line 3698 sub print_first_users_upload_form {
|
$str .= '<input type="hidden" name="action" value="upload" />'; |
$str .= '<input type="hidden" name="action" value="upload" />'; |
$str .= '<input type="hidden" name="state" value="got_file" />'; |
$str .= '<input type="hidden" name="state" value="got_file" />'; |
|
|
|
|
$str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n"; |
$str .= '<h2>'.&mt('Upload a file containing information about users').'</h2>'."\n"; |
|
|
# Excel and CSV Help |
# Excel and CSV Help |
$str .= '<p>' |
$str .= '<div class="LC_left_float">' |
.&Apache::loncommon::help_open_topic("Course_Create_Class_List", |
.&Apache::loncommon::help_open_topic("Course_Create_Class_List", |
&mt("How do I create a users list from a spreadsheet")) |
&mt("How do I create a users list from a spreadsheet")) |
."<br />\n" |
.'</div><div class="LC_left_float">'."\n" |
.&Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
.&Apache::loncommon::help_open_topic("Course_Convert_To_CSV", |
&mt("How do I create a CSV file from a spreadsheet")) |
&mt("How do I create a CSV file from a spreadsheet")) |
."</p>\n"; |
.'</div><br clear="all" />'."\n"; |
|
|
$str .= &Apache::lonhtmlcommon::start_pick_box() |
$str .= &Apache::lonhtmlcommon::start_pick_box() |
.&Apache::lonhtmlcommon::row_title(&mt('File')) |
.&Apache::lonhtmlcommon::row_title(&mt('File')); |
.'<p class="LC_info">'."\n" |
if (&Apache::lonlocal::current_language() ne 'en') { |
.&mt('Please upload an UTF8 encoded file to ensure a correct character encoding in your classlist.')."\n" |
if ($context eq 'course') { |
.'</p>'."\n" |
$str .= '<p class="LC_info">'."\n" |
.&Apache::loncommon::upfile_select_html() |
.&mt('Please upload an UTF8 encoded file to ensure a correct character encoding in your classlist.')."\n" |
|
.'</p>'."\n"; |
|
} |
|
} |
|
$str .= &Apache::loncommon::upfile_select_html() |
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_closure() |
.&Apache::lonhtmlcommon::row_title( |
.&Apache::lonhtmlcommon::row_title( |
'<label for="noFirstLine">' |
'<label for="noFirstLine">' |
Line 3610 sub print_first_users_upload_form {
|
Line 3731 sub print_first_users_upload_form {
|
.'<input type="submit" name="fileupload" value="'.&mt('Next').'" />' |
.'<input type="submit" name="fileupload" value="'.&mt('Next').'" />' |
.'</p>'; |
.'</p>'; |
|
|
$str .= &Apache::loncommon::end_page(); |
|
|
|
$r->print($str); |
$r->print($str); |
return; |
return; |
} |
} |
Line 3673 sub upfile_drop_add {
|
Line 3792 sub upfile_drop_add {
|
} |
} |
my ($startdate,$enddate) = &get_dates_from_form(); |
my ($startdate,$enddate) = &get_dates_from_form(); |
if ($env{'form.makedatesdefault'}) { |
if ($env{'form.makedatesdefault'}) { |
$r->print(&make_dates_default($startdate,$enddate,$context,$crstype); |
$r->print(&make_dates_default($startdate,$enddate,$context,$crstype)); |
} |
} |
# Determine domain and desired host (home server) |
# Determine domain and desired host (home server) |
my $defdom=$env{'request.role.domain'}; |
my $defdom=$env{'request.role.domain'}; |
Line 3732 sub upfile_drop_add {
|
Line 3851 sub upfile_drop_add {
|
} elsif ($setting eq 'course') { |
} elsif ($setting eq 'course') { |
$defaultrole = $env{'form.courserole'}; |
$defaultrole = $env{'form.courserole'}; |
$defaultsec = $env{'form.sections'}; |
$defaultsec = $env{'form.sections'}; |
} |
} |
} elsif ($context eq 'author') { |
} elsif ($context eq 'author') { |
$defaultrole = $env{'form.defaultrole'}; |
$defaultrole = $env{'form.defaultrole'}; |
} elsif ($context eq 'course') { |
} elsif ($context eq 'course') { |
Line 3751 sub upfile_drop_add {
|
Line 3870 sub upfile_drop_add {
|
} |
} |
my (%userlist,%modifiable_fields,@poss_roles); |
my (%userlist,%modifiable_fields,@poss_roles); |
my $secidx = &Apache::loncoursedata::CL_SECTION(); |
my $secidx = &Apache::loncoursedata::CL_SECTION(); |
my @courseroles = &roles_by_context('course',1,'',$crstype); |
my @courseroles = &roles_by_context('course',1,$crstype); |
if (!&Apache::lonnet::allowed('mau',$domain)) { |
if (!&Apache::lonnet::allowed('mau',$domain)) { |
if ($context eq 'course' || $context eq 'author') { |
if ($context eq 'course' || $context eq 'author') { |
@poss_roles = &curr_role_permissions($context,'','',$crstype); |
@poss_roles = &curr_role_permissions($context,'','',$crstype); |
Line 3839 sub upfile_drop_add {
|
Line 3958 sub upfile_drop_add {
|
$r->print($groupwarn.'<br />'); |
$r->print($groupwarn.'<br />'); |
} |
} |
} |
} |
my (%curr_rules,%got_rules,%alerts); |
my (%curr_rules,%got_rules,%alerts,%cancreate); |
my %customroles = &my_custom_roles(); |
my %customroles = &my_custom_roles($crstype); |
my @permitted_roles = |
my @permitted_roles = |
&roles_on_upload($context,$setting,$crstype,%customroles); |
&roles_on_upload($context,$setting,$crstype,%customroles); |
|
my %longtypes = &Apache::lonlocal::texthash( |
|
official => 'Institutional', |
|
unofficial => 'Non-institutional', |
|
); |
|
map { $cancreate{$_} = &can_create_user($domain,$context,$_); } keys(%longtypes); |
# Get new users list |
# Get new users list |
foreach my $line (@userdata) { |
foreach my $line (@userdata) { |
my @secs; |
my @secs; |
my %entries=&Apache::loncommon::record_sep($line); |
my %entries=&Apache::loncommon::record_sep($line); |
# Determine user name |
# Determine user name |
|
$entries{$fields{'username'}} =~ s/^\s+|\s+$//g; |
unless (($entries{$fields{'username'}} eq '') || |
unless (($entries{$fields{'username'}} eq '') || |
(!defined($entries{$fields{'username'}}))) { |
(!defined($entries{$fields{'username'}}))) { |
my ($fname, $mname, $lname,$gen) = ('','','',''); |
my ($fname, $mname, $lname,$gen) = ('','','',''); |
Line 3868 sub upfile_drop_add {
|
Line 3993 sub upfile_drop_add {
|
$gen=$entries{$fields{'gen'}}; |
$gen=$entries{$fields{'gen'}}; |
} |
} |
} |
} |
|
|
if ($entries{$fields{'username'}} |
if ($entries{$fields{'username'}} |
ne &LONCAPA::clean_username($entries{$fields{'username'}})) { |
ne &LONCAPA::clean_username($entries{$fields{'username'}})) { |
|
my $nowhitespace; |
|
if ($entries{$fields{'username'}} =~ /\s/) { |
|
$nowhitespace = ' - '.&mt('usernames may not contain spaces.'); |
|
} |
$r->print('<br />'. |
$r->print('<br />'. |
&mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]', |
&mt('[_1]: Unacceptable username for user [_2] [_3] [_4] [_5]', |
'<b>'.$entries{$fields{'username'}}.'</b>',$fname,$mname,$lname,$gen)); |
'<b>'.$entries{$fields{'username'}}.'</b>',$fname,$mname,$lname,$gen). |
|
$nowhitespace); |
next; |
next; |
} else { |
} else { |
if ($entries{$fields{'domain'}} |
if ($entries{$fields{'domain'}} |
Line 3988 sub upfile_drop_add {
|
Line 4119 sub upfile_drop_add {
|
my (%rulematch,%inst_results,%idinst_results); |
my (%rulematch,%inst_results,%idinst_results); |
my $uhome=&Apache::lonnet::homeserver($username,$userdomain); |
my $uhome=&Apache::lonnet::homeserver($username,$userdomain); |
if ($uhome eq 'no_host') { |
if ($uhome eq 'no_host') { |
next if ($userdomain ne $domain); |
if ($userdomain ne $domain) { |
|
$r->print('<br />'. |
|
&mt('[_1]: The domain specified ([_2]) is different to that of the course.', |
|
'<b>'.$username.'</b>',$userdomain).'<br />'. |
|
&mt('The user does not already exist, and you may not create a new user in a different domain.')); |
|
next; |
|
} |
$checkid = 1; |
$checkid = 1; |
$newuser = 1; |
$newuser = 1; |
|
my $user = $username.':'.$domain; |
my $checkhash; |
my $checkhash; |
my $checks = { 'username' => 1 }; |
my $checks = { 'username' => 1 }; |
$checkhash->{$username.':'.$domain} = { 'newuser' => 1, }; |
$checkhash->{$username.':'.$domain} = { 'newuser' => 1, }; |
Line 3999 sub upfile_drop_add {
|
Line 4137 sub upfile_drop_add {
|
\%got_rules); |
\%got_rules); |
if (ref($alerts{'username'}) eq 'HASH') { |
if (ref($alerts{'username'}) eq 'HASH') { |
if (ref($alerts{'username'}{$domain}) eq 'HASH') { |
if (ref($alerts{'username'}{$domain}) eq 'HASH') { |
next if ($alerts{'username'}{$domain}{$username}); |
if ($alerts{'username'}{$domain}{$username}) { |
|
$r->print('<br />'. |
|
&mt('[_1]: matches the username format at your institution, but is not known to your directory service.','<b>'.$username.'</b>').'<br />'. |
|
&mt('Consequently, the user was not created.')); |
|
next; |
|
} |
|
} |
|
} |
|
my $usertype = 'unofficial'; |
|
if (ref($rulematch{$user}) eq 'HASH') { |
|
if ($rulematch{$user}{'username'}) { |
|
$usertype = 'official'; |
} |
} |
} |
} |
|
unless ($cancreate{$usertype}) { |
|
my $showtype = $longtypes{$usertype}; |
|
$r->print('<br />'. |
|
&mt("[_1]: The user does not exist, and you are not permitted to create users of type: $showtype.",'<b>'.$username.'</b>')); |
|
next; |
|
} |
} else { |
} else { |
if ($context eq 'course' || $context eq 'author') { |
if ($context eq 'course' || $context eq 'author') { |
if ($userdomain eq $domain ) { |
if ($userdomain eq $domain ) { |
Line 4052 sub upfile_drop_add {
|
Line 4207 sub upfile_drop_add {
|
\%got_rules); |
\%got_rules); |
if (ref($alerts{'id'}) eq 'HASH') { |
if (ref($alerts{'id'}) eq 'HASH') { |
if (ref($alerts{'id'}{$userdomain}) eq 'HASH') { |
if (ref($alerts{'id'}{$userdomain}) eq 'HASH') { |
next if ($alerts{'id'}{$userdomain}{$id}); |
if ($alerts{'id'}{$userdomain}{$id}) { |
|
$r->print(&mt('[_1]: has a student/employee ID matching the format at your institution, but the ID is found by your directory service.', |
|
'<b>'.$username.'</b>').'<br />'. |
|
&mt('Consequently, the user was not created.')); |
|
next; |
|
} |
} |
} |
} |
} |
} |
} |
Line 4084 sub upfile_drop_add {
|
Line 4244 sub upfile_drop_add {
|
$role = 'cr_'.$env{'user.domain'}.'_'. |
$role = 'cr_'.$env{'user.domain'}.'_'. |
$env{'user.name'}.'_'.$role; |
$env{'user.name'}.'_'.$role; |
} |
} |
if ($role ne 'cc') { |
if (($role ne 'cc') && ($role ne 'co')) { |
if (@secs > 1) { |
if (@secs > 1) { |
$multiple = 1; |
$multiple = 1; |
foreach my $sec (@secs) { |
foreach my $sec (@secs) { |
Line 4147 sub upfile_drop_add {
|
Line 4307 sub upfile_drop_add {
|
} |
} |
} # end of foreach (@userdata) |
} # end of foreach (@userdata) |
# Flush the course logs so reverse user roles immediately updated |
# Flush the course logs so reverse user roles immediately updated |
&Apache::lonnet::flushcourselogs(); |
$r->register_cleanup(\&Apache::lonnet::flushcourselogs); |
$r->print("</p>\n<p>\n".&mt('Processed [quant,_1,user].',$counts{'user'}). |
$r->print("</p>\n<p>\n".&mt('Processed [quant,_1,user].',$counts{'user'}). |
"</p>\n"); |
"</p>\n"); |
if ($counts{'role'} > 0) { |
if ($counts{'role'} > 0) { |
Line 4311 sub print_drop_menu {
|
Line 4471 sub print_drop_menu {
|
# ================================================================== Phase four |
# ================================================================== Phase four |
|
|
sub update_user_list { |
sub update_user_list { |
my ($r,$context,$setting,$choice) = @_; |
my ($r,$context,$setting,$choice,$crstype) = @_; |
my $now = time; |
my $now = time; |
my $count=0; |
my $count=0; |
my $crstype; |
|
if ($context eq 'course') { |
if ($context eq 'course') { |
$crstype = &Apache::loncommon::course_type(); |
$crstype = &Apache::loncommon::course_type(); |
} |
} |
Line 4329 sub update_user_list {
|
Line 4488 sub update_user_list {
|
'reenable' => 'Re-enabled', |
'reenable' => 'Re-enabled', |
'activate' => 'Activated', |
'activate' => 'Activated', |
'chgdates' => 'Changed Access Dates for', |
'chgdates' => 'Changed Access Dates for', |
'chgsec' => 'Changed section for', |
'chgsec' => 'Changed section(s) for', |
'drop' => 'Dropped', |
'drop' => 'Dropped', |
}, |
}, |
error => {'revoke' => 'revoking', |
error => {'revoke' => 'revoking', |
Line 4346 sub update_user_list {
|
Line 4505 sub update_user_list {
|
($startdate,$enddate) = &get_dates_from_form(); |
($startdate,$enddate) = &get_dates_from_form(); |
} |
} |
foreach my $item (@changelist) { |
foreach my $item (@changelist) { |
my ($role,$uname,$udom,$cid,$sec,$scope,$result,$type,$locktype,@sections, |
my ($role,$uname,$udom,$cid,$sec,$scope,$result,$type,$locktype, |
$scopestem); |
@sections,$scopestem,$singlesec,$showsecs,$warn_singlesec, |
|
$nothingtodo,$keepnosection); |
if ($choice eq 'drop') { |
if ($choice eq 'drop') { |
($uname,$udom,$sec) = split(/:/,$item,-1); |
($uname,$udom,$sec) = split(/:/,$item,-1); |
$role = 'st'; |
$role = 'st'; |
Line 4445 sub update_user_list {
|
Line 4605 sub update_user_list {
|
} |
} |
} elsif ($choice eq 'chgsec') { |
} elsif ($choice eq 'chgsec') { |
my (@newsecs,$revresult,$nochg,@retained); |
my (@newsecs,$revresult,$nochg,@retained); |
if ($role ne 'cc') { |
if (($role ne 'cc') && ($role ne 'co')) { |
@newsecs = split(/,/,$env{'form.newsecs'}); |
my @secs = sort(split(/,/,$env{'form.newsecs'})); |
|
if (@secs) { |
|
my %curr_groups = &Apache::longroup::coursegroups(); |
|
foreach my $sec (@secs) { |
|
next if (($sec =~ /\W/) || ($sec eq 'none') || |
|
(exists($curr_groups{$sec}))); |
|
push(@newsecs,$sec); |
|
} |
|
} |
} |
} |
# remove existing section if not to be retained. |
# remove existing section if not to be retained. |
if (!$env{'form.retainsec'}) { |
if (!$env{'form.retainsec'} || ($role eq 'st')) { |
if ($sec eq '') { |
if ($sec eq '') { |
if (@newsecs == 0) { |
if (@newsecs == 0) { |
$result = &mt('No change in section assignment (none)'); |
$result = 'ok'; |
$nochg = 1; |
$nochg = 1; |
|
$nothingtodo = 1; |
} else { |
} else { |
$revresult = |
$revresult = |
&Apache::lonnet::revokerole($udom,$uname, |
&Apache::lonnet::revokerole($udom,$uname, |
Line 4480 sub update_user_list {
|
Line 4649 sub update_user_list {
|
} else { |
} else { |
if ($sec eq '') { |
if ($sec eq '') { |
$nochg = 1; |
$nochg = 1; |
} else { |
$keepnosection = 1; |
|
} else { |
push(@retained,$sec); |
push(@retained,$sec); |
} |
} |
} |
} |
# add new sections |
# add new sections |
|
my (@diffs,@shownew); |
|
if (@retained) { |
|
@diffs = &Apache::loncommon::compare_arrays(\@retained,\@newsecs); |
|
} else { |
|
@diffs = @newsecs; |
|
} |
if (@newsecs == 0) { |
if (@newsecs == 0) { |
if (!$nochg) { |
if ($nochg) { |
|
$result = 'ok'; |
|
$nothingtodo = 1; |
|
} else { |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = |
$result = |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,undef,$end,$start,$type,$locktype,$cid,'',$context); |
&Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,undef,$end,$start,$type,$locktype,$cid,'',$context); |
Line 4495 sub update_user_list {
|
Line 4674 sub update_user_list {
|
$result = &Apache::lonnet::assignrole($udom,$uname,$newscope,$role,$end,$start,'','',$context); |
$result = &Apache::lonnet::assignrole($udom,$uname,$newscope,$role,$end,$start,'','',$context); |
} |
} |
} |
} |
|
$showsecs = &mt('No section'); |
|
} elsif (@diffs == 0) { |
|
$result = 'ok'; |
|
$nothingtodo = 1; |
} else { |
} else { |
foreach my $newsec (@newsecs) { |
foreach my $newsec (@newsecs) { |
if (!grep(/^\Q$newsec\E$/,@retained)) { |
if (!grep(/^\Q$newsec\E$/,@retained)) { |
if ($role eq 'st') { |
if ($role eq 'st') { |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$newsec,$end,$start,$type,$locktype,$cid,'',$context); |
$result = &Apache::lonnet::modify_student_enrollment($udom,$uname,undef,undef,undef,undef,undef,$newsec,$end,$start,$type,$locktype,$cid,'',$context); |
|
if (@newsecs > 1) { |
|
my $showsingle; |
|
if ($newsec eq '') { |
|
$showsingle = &mt('No section'); |
|
} else { |
|
$showsingle = $newsec; |
|
} |
|
if ($crstype eq 'Community') { |
|
$warn_singlesec = &mt('Although more than one section was indicated, a role was only added for the first section - [_1], as each community member may only be in one section at a time.','<i>'.$showsingle.'</i>'); |
|
} else { |
|
$warn_singlesec = &mt('Although more than one section was indicated, a role was only added for the first section - [_1], as each student may only be in one section of a course at a time.','<i>'.$showsingle.'</i>'); |
|
} |
|
$showsecs = $showsingle; |
|
last; |
|
} else { |
|
if ($newsec eq '') { |
|
$showsecs = &mt('No section'); |
|
} else { |
|
$showsecs = $newsec; |
|
} |
|
} |
} else { |
} else { |
my $newscope = $scopestem; |
my $newscope = $scopestem; |
if ($newsec ne '') { |
if ($newsec ne '') { |
$newscope .= '/'.$newsec; |
$newscope .= '/'.$newsec; |
|
push(@shownew,$newsec); |
} |
} |
$result = &Apache::lonnet::assignrole($udom,$uname, |
$result = &Apache::lonnet::assignrole($udom,$uname, |
$newscope,$role,$end,$start); |
$newscope,$role,$end,$start); |
|
|
} |
} |
} |
} |
} |
} |
} |
} |
|
unless ($role eq 'st') { |
|
unless ($showsecs) { |
|
my @tolist = sort(@shownew,@retained); |
|
if ($keepnosection) { |
|
push(@tolist,&mt('No section')); |
|
} |
|
$showsecs = join(', ',@tolist); |
|
} |
|
} |
} |
} |
} |
} |
my $extent = $scope; |
my $extent = $scope; |
Line 4521 sub update_user_list {
|
Line 4736 sub update_user_list {
|
} |
} |
} |
} |
if ($result eq 'ok' || $result eq 'ok:') { |
if ($result eq 'ok' || $result eq 'ok:') { |
$r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for [_3]", |
my $dates; |
$plrole,$extent,$uname.':'.$udom).'<br />'); |
if (($choice eq 'chgsec') || ($choice eq 'chgdates')) { |
$count++; |
$dates = &dates_feedback($start,$end,$now); |
|
} |
|
if ($choice eq 'chgsec') { |
|
if ($nothingtodo) { |
|
$r->print(&mt("Section assignment for role of '[_1]' in [_2] for '[_3]' unchanged.",$plrole,$extent,'<i>'. |
|
&Apache::loncommon::plainname($uname,$udom). |
|
'</i>').' '); |
|
if ($sec eq '') { |
|
$r->print(&mt('[_1]No section[_2] - [_3]','<b>','</b>',$dates)); |
|
} else { |
|
$r->print(&mt('Section(s): [_1] - [_2]', |
|
'<b>'.$showsecs.'</b>',$dates)); |
|
} |
|
$r->print('<br />'); |
|
} else { |
|
$r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for '[_3]' to [_4] - [_5]",$plrole,$extent, |
|
'<i>'.&Apache::loncommon::plainname($uname,$udom).'</i>', |
|
'<b>'.$showsecs.'</b>',$dates).'<br />'); |
|
$count ++; |
|
} |
|
if ($warn_singlesec) { |
|
$r->print('<div class="LC_warning">'.$warn_singlesec.'</div>'); |
|
} |
|
} elsif ($choice eq 'chgdates') { |
|
$r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for '[_3]' - [_4]",$plrole,$extent, |
|
'<i>'.&Apache::loncommon::plainname($uname,$udom).'</i>', |
|
$dates).'<br />'); |
|
$count ++; |
|
} else { |
|
$r->print(&mt("$result_text{'ok'}{$choice} role of '[_1]' in [_2] for '[_3]'.",$plrole,$extent, |
|
'<i>'.&Apache::loncommon::plainname($uname,$udom).'</i>'). |
|
'<br />'); |
|
$count ++; |
|
} |
} else { |
} else { |
$r->print( |
$r->print( |
&mt("Error $result_text{'error'}{$choice} [_1] in [_2] for [_3]: [_4].", |
&mt("Error $result_text{'error'}{$choice} [_1] in [_2] for '[_3]': [_4].", |
$plrole,$extent,$uname.':'.$udom,$result).'<br />'); |
$plrole,$extent, |
|
'<i>'.&Apache::loncommon::plainname($uname,$udom).'</i>', |
|
$result).'<br />'); |
} |
} |
} |
} |
$r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n"); |
$r->print('<form name="studentform" method="post" action="/adm/createuser">'."\n"); |
Line 4543 sub update_user_list {
|
Line 4793 sub update_user_list {
|
} |
} |
} |
} |
} |
} |
$r->print('<p><b>'.&mt("$result_text{'ok'}{$choice} role(s) for [quant,_1,user,users,no users].",$count).'</b></p>'); |
$r->print('<p><b>'.&mt("$result_text{'ok'}{$choice} for [quant,_1,user role,user roles,no user roles].",$count).'</b></p>'); |
if ($count > 0) { |
if ($count > 0) { |
if ($choice eq 'revoke' || $choice eq 'drop') { |
if ($choice eq 'revoke' || $choice eq 'drop') { |
$r->print('<p>'.&mt('Re-enabling will re-activate data for the role.').'</p>'); |
$r->print('<p>'.&mt('Re-enabling will re-activate data for the role.').'</p>'); |
} |
} |
# Flush the course logs so reverse user roles immediately updated |
# Flush the course logs so reverse user roles immediately updated |
&Apache::lonnet::flushcourselogs(); |
$r->register_cleanup(\&Apache::lonnet::flushcourselogs); |
} |
} |
if ($env{'form.makedatesdefault'}) { |
if ($env{'form.makedatesdefault'}) { |
if ($choice eq 'chgdates' || $choice eq 'reenable' || $choice eq 'activate') { |
if ($choice eq 'chgdates' || $choice eq 'reenable' || $choice eq 'activate') { |
Line 4563 sub update_user_list {
|
Line 4813 sub update_user_list {
|
$r->print('<a href="javascript:document.studentform.submit()">'.$linktext.'</a></form>'."\n"); |
$r->print('<a href="javascript:document.studentform.submit()">'.$linktext.'</a></form>'."\n"); |
} |
} |
|
|
|
sub dates_feedback { |
|
my ($start,$end,$now) = @_; |
|
my $dates; |
|
if ($start < $now) { |
|
if ($end == 0) { |
|
$dates .= &mt('role(s) active now; no end date'); |
|
} elsif ($end > $now) { |
|
$dates = &mt('role(s) active now; ends [_1].',&Apache::lonlocal::locallocaltime($end)); |
|
} else { |
|
$dates = &mt('role(s) expired: [_1].',&Apache::lonlocal::locallocaltime($end)); |
|
} |
|
} else { |
|
if ($end == 0 || $end > $now) { |
|
$dates = &mt('future role(s); starts: [_1].',&Apache::lonlocal::locallocaltime($start)); |
|
} else { |
|
$dates = &mt('role(s) expired: [_1].',&Apache::lonlocal::locallocaltime($end)); |
|
} |
|
} |
|
return $dates; |
|
} |
|
|
sub classlist_drop { |
sub classlist_drop { |
my ($scope,$uname,$udom,$now) = @_; |
my ($scope,$uname,$udom,$now) = @_; |
my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); |
my ($cdom,$cnum) = ($scope=~m{^/($match_domain)/($match_courseid)}); |
Line 4700 sub get_groupslist {
|
Line 4971 sub get_groupslist {
|
} |
} |
|
|
sub setsections_javascript { |
sub setsections_javascript { |
my ($formname,$groupslist,$mode,$checkauth) = @_; |
my ($formname,$groupslist,$mode,$checkauth,$crstype) = @_; |
my ($checkincluded,$finish,$rolecode,$setsection_js); |
my ($checkincluded,$finish,$rolecode,$setsection_js); |
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
$checkincluded = 'formname.name == "'.$formname.'"'; |
$checkincluded = 'formname.name == "'.$formname.'"'; |
Line 4739 sub setsections_javascript {
|
Line 5010 sub setsections_javascript {
|
} |
} |
my %alerts = &Apache::lonlocal::texthash( |
my %alerts = &Apache::lonlocal::texthash( |
secd => 'Section designations do not apply to Course Coordinator roles.', |
secd => 'Section designations do not apply to Course Coordinator roles.', |
|
sedn => 'Section designations do not apply to Coordinator roles.', |
accr => 'A course coordinator role will be added with access to all sections.', |
accr => 'A course coordinator role will be added with access to all sections.', |
|
acor => 'A coordinator role will be added with access to all sections', |
inea => 'In each course, each user may only have one student role at a time.', |
inea => 'In each course, each user may only have one student role at a time.', |
|
inco => 'In each community, each user may only have one member role at a time.', |
youh => 'You had selected ', |
youh => 'You had selected ', |
secs => 'sections.', |
secs => 'sections.', |
plmo => 'Please modify your selections so they include no more than one section.', |
plmo => 'Please modify your selections so they include no more than one section.', |
Line 4748 sub setsections_javascript {
|
Line 5022 sub setsections_javascript {
|
plch => 'Please choose a different section name.', |
plch => 'Please choose a different section name.', |
mnot => 'may not be used as a section name, as it is the name of a course group.', |
mnot => 'may not be used as a section name, as it is the name of a course group.', |
secn => 'Section names and group names must be distinct. Please choose a different section name.', |
secn => 'Section names and group names must be distinct. Please choose a different section name.', |
|
nonw => 'Section names may only contain letters or numbers.', |
); |
); |
$setsection_js .= <<"ENDSECCODE"; |
$setsection_js .= <<"ENDSECCODE"; |
|
|
function setSections(formname) { |
function setSections(formname,crstype) { |
var re1 = /^currsec_/; |
var re1 = /^currsec_/; |
|
var re2 =/\\W/; |
|
var trimleading = /^\\s+/; |
|
var trimtrailing = /\\s+\$/; |
var groups = new Array($groupslist); |
var groups = new Array($groupslist); |
for (var i=0;i<formname.elements.length;i++) { |
for (var i=0;i<formname.elements.length;i++) { |
var str = formname.elements[i].name; |
var str = formname.elements[i].name; |
var checkcurr = str.match(re1); |
var checkcurr = str.match(re1); |
if (checkcurr != null) { |
if (checkcurr != null) { |
|
var num = i; |
if ($checkincluded) { |
if ($checkincluded) { |
$rolecode |
$rolecode |
if (role == 'cc') { |
if (role == 'cc' || role == 'co') { |
alert("$alerts{'secd'}\\n$alerts{'accr'}"); |
if (role == 'cc') { |
} |
alert("$alerts{'secd'}\\n$alerts{'accr'}"); |
else { |
} else { |
|
alert("$alerts{'sedn'}\\n$alerts{'acor'}"); |
|
} |
|
} else { |
var sections = ''; |
var sections = ''; |
var numsec = 0; |
var numsec = 0; |
var sections; |
var fromexisting = new Array(); |
for (var j=0; j<formname.elements[i].length; j++) { |
for (var j=0; j<formname.elements[num].length; j++) { |
if (formname.elements[i].options[j].selected == true ) { |
if (formname.elements[num].options[j].selected == true ) { |
if (formname.elements[i].options[j].value != "") { |
var addsec = formname.elements[num].options[j].value; |
|
if ((addsec != "") && (addsec != null)) { |
|
fromexisting.push(addsec); |
if (numsec == 0) { |
if (numsec == 0) { |
if (formname.elements[i].options[j].value != "") { |
sections = addsec; |
sections = formname.elements[i].options[j].value; |
} else { |
numsec ++; |
sections = sections + "," + addsec; |
} |
|
} |
|
else { |
|
sections = sections + "," + formname.elements[i].options[j].value |
|
numsec ++; |
|
} |
} |
|
numsec ++; |
} |
} |
} |
} |
} |
} |
if (numsec > 0) { |
var newsecs = formname.elements[num+1].value; |
if (formname.elements[i+1].value != "" && formname.elements[i+1].value != null) { |
var validsecs = new Array(); |
sections = sections + "," + formname.elements[i+1].value; |
var validsecstr = ''; |
} |
var badsecs = new Array(); |
} |
|
else { |
|
sections = formname.elements[i+1].value; |
|
} |
|
var newsecs = formname.elements[i+1].value; |
|
var numsplit; |
|
if (newsecs != null && newsecs != "") { |
if (newsecs != null && newsecs != "") { |
numsplit = newsecs.split(/,/g); |
var numsplit; |
numsec = numsec + numsplit.length; |
if (newsecs.indexOf(',') == -1) { |
|
numsplit = new Array(newsecs); |
|
} else { |
|
numsplit = newsecs.split(/,/g); |
|
} |
|
for (var m=0; m<numsplit.length; m++) { |
|
var newsec = numsplit[m]; |
|
newsec = newsec.replace(trimleading,''); |
|
newsec = newsec.replace(trimtrailing,''); |
|
if (re2.test(newsec) == true) { |
|
badsecs.push(newsec); |
|
} else { |
|
if (newsec != '') { |
|
var isnew = 1; |
|
if (fromexisting != null) { |
|
for (var n=0; n<fromexisting.length; n++) { |
|
if (newsec == fromexisting[n]) { |
|
isnew = 0; |
|
} |
|
} |
|
} |
|
if (isnew == 1) { |
|
validsecs.push(newsec); |
|
} |
|
} |
|
} |
|
} |
|
if (badsecs.length > 0) { |
|
alert("$alerts{'nonw'}\\n$alerts{'plch'}"); |
|
return; |
|
} |
|
numsec = numsec + validsecs.length; |
} |
} |
|
|
if ((role == 'st') && (numsec > 1)) { |
if ((role == 'st') && (numsec > 1)) { |
alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}") |
if (crstype == 'Community') { |
|
alert("$alerts{'inea'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); |
|
} else { |
|
alert("$alerts{'inco'} $alerts{'youh'} "+numsec+" $alerts{'secs'}\\n$alerts{'plmo'}"); |
|
} |
return; |
return; |
} |
} else { |
else { |
if (validsecs != null) { |
if (numsplit != null) { |
for (var j=0; j<validsecs.length; j++) { |
for (var j=0; j<numsplit.length; j++) { |
if (validsecstr == '' || validsecstr == null) { |
if ((numsplit[j] == 'all') || |
validsecstr = validsecs[j]; |
(numsplit[j] == 'none')) { |
} else { |
alert("'"+numsplit[j]+"' $alerts{'mayn'}\\n$alerts{'plch'}"); |
validsecstr += ','+validsecs[j]; |
|
} |
|
if ((validsecs[j] == 'all') || |
|
(validsecs[j] == 'none')) { |
|
alert("'"+validsecs[j]+"' $alerts{'mayn'}\\n$alerts{'plch'}"); |
return; |
return; |
} |
} |
for (var k=0; k<groups.length; k++) { |
for (var k=0; k<groups.length; k++) { |
if (numsplit[j] == groups[k]) { |
if (validsecs[j] == groups[k]) { |
alert("'"+numsplit[j]+"' $alerts{'mnot'}\\n$alerts{'secn'}"); |
alert("'"+validsecs[j]+"' $alerts{'mnot'}\\n$alerts{'secn'}"); |
return; |
return; |
} |
} |
} |
} |
} |
} |
} |
} |
formname.elements[i+2].value = sections; |
|
} |
} |
|
if ((validsecstr != '') && (validsecstr != null)) { |
|
if ((sections == '') || (sections == null)) { |
|
sections = validsecstr; |
|
} else { |
|
sections = sections + "," + validsecstr; |
|
} |
|
} |
|
formname.elements[num+2].value = sections; |
} |
} |
} |
} |
} |
} |
Line 5073 sub dc_setcourse_js {
|
Line 5392 sub dc_setcourse_js {
|
my ($formname,$mode,$context) = @_; |
my ($formname,$mode,$context) = @_; |
my ($dc_setcourse_code,$authen_check); |
my ($dc_setcourse_code,$authen_check); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
my $cctext = &Apache::lonnet::plaintext('cc'); |
|
my $cotext = &Apache::lonnet::plaintext('co'); |
my %alerts = §ioncheck_alerts(); |
my %alerts = §ioncheck_alerts(); |
my $role = 'role'; |
my $role = 'role'; |
if ($mode eq 'upload') { |
if ($mode eq 'upload') { |
Line 5119 function setCourse() {
|
Line 5439 function setCourse() {
|
numsections = numsections + newsecs.length; |
numsections = numsections + newsecs.length; |
} |
} |
if ((userrole == 'st') && (numsections > 1)) { |
if ((userrole == 'st') && (numsections > 1)) { |
alert("$alerts{'inea'}. $alerts{'youh'} "+numsections+" $alerts{'sect'}.\\n$alerts{'plsm'}.") |
if (document.$formname.crstype.value == 'Community') { |
|
alert("$alerts{'inco'}. $alerts{'youh'} "+numsections+" $alerts{'sect'}.\\n$alerts{'plsm'}.") |
|
} else { |
|
alert("$alerts{'inea'}. $alerts{'youh'} "+numsections+" $alerts{'sect'}.\\n$alerts{'plsm'}.") |
|
} |
return; |
return; |
} |
} |
for (var j=0; j<newsecs.length; j++) { |
for (var j=0; j<newsecs.length; j++) { |
Line 5131 function setCourse() {
|
Line 5455 function setCourse() {
|
var groups = document.$formname.groups.value.split(/,/g); |
var groups = document.$formname.groups.value.split(/,/g); |
for (var k=0; k<groups.length; k++) { |
for (var k=0; k<groups.length; k++) { |
if (newsecs[j] == groups[k]) { |
if (newsecs[j] == groups[k]) { |
alert("'"+newsecs[j]+"' $alerts{'mayt'}.\\n$alerts{'secn'}. $alerts{'plsc'}."); |
if (document.$formname.crstype.value == 'Community') { |
|
alert("'"+newsecs[j]+"' $alerts{'mayc'}.\\n$alerts{'secn'}. $alerts{'plsc'}."); |
|
} else { |
|
alert("'"+newsecs[j]+"' $alerts{'mayt'}.\\n$alerts{'secn'}. $alerts{'plsc'}."); |
|
} |
return; |
return; |
} |
} |
} |
} |
Line 5141 function setCourse() {
|
Line 5469 function setCourse() {
|
alert("$alerts{'secd'} $cctext $alerts{'role'}.\\n$alerts{'accr'}."); |
alert("$alerts{'secd'} $cctext $alerts{'role'}.\\n$alerts{'accr'}."); |
section = ""; |
section = ""; |
} |
} |
|
if ((userrole == 'co') && (numsections > 0)) { |
|
alert("$alerts{'secd'} $cotext $alerts{'role'}.\\n$alerts{'accr'}."); |
|
section = ""; |
|
} |
SCRIPTTOP |
SCRIPTTOP |
if ($mode ne 'upload') { |
if ($mode ne 'upload') { |
$dc_setcourse_code .= (<<"ENDSCRIPT"); |
$dc_setcourse_code .= (<<"ENDSCRIPT"); |
var coursename = "_$env{'request.role.domain'}"+"_"+course+"_"+userrole |
var coursename = "_$env{'request.role.domain'}"+"_"+course+"_"+userrole |
var numcourse = getIndex(document.$formname.dccourse); |
var numcourse = getIndex(document.$formname.dccourse); |
if (numcourse == "-1") { |
if (numcourse == "-1") { |
alert("$alerts{'thwa'}"); |
if (document.$formname.type == 'Community') { |
|
alert("$alerts{'thwc'}"); |
|
} else { |
|
alert("$alerts{'thwa'}"); |
|
} |
return; |
return; |
} |
} |
else { |
else { |
Line 5256 ENDSCRIPT
|
Line 5592 ENDSCRIPT
|
|
|
sub sectioncheck_alerts { |
sub sectioncheck_alerts { |
my %alerts = &Apache::lonlocal::texthash( |
my %alerts = &Apache::lonlocal::texthash( |
curd => 'You must select a course in the current domain', |
curd => 'You must select a course or community in the current domain', |
inea => 'In each course, each user may only have one student role at a time', |
inea => 'In each course, each user may only have one student role at a time', |
|
inco => 'In each community, each user may only have one member role at a time', |
youh => 'You had selected', |
youh => 'You had selected', |
sect => 'sections', |
sect => 'sections', |
plsm => 'Please modify your selections so they include no more than one section', |
plsm => 'Please modify your selections so they include no more than one section', |
mayn => 'may not be used as the name for a section, as it is a reserved word', |
mayn => 'may not be used as the name for a section, as it is a reserved word', |
plsc => 'Please choose a different section name', |
plsc => 'Please choose a different section name', |
mayt => 'may not be used as the name for a section, as it is the name of a course group', |
mayt => 'may not be used as the name for a section, as it is the name of a course group', |
|
mayc => 'may not be used as the name for a section, as it is the name of a community group', |
secn => 'Section names and group names must be distinct', |
secn => 'Section names and group names must be distinct', |
secd => 'Section designations do not apply to ', |
secd => 'Section designations do not apply to ', |
role => 'roles', |
role => 'roles', |
accr => 'role will be added with access to all sections', |
accr => 'role will be added with access to all sections', |
thwa => 'There was a problem with your course selection' |
thwa => 'There was a problem with your course selection', |
|
thwc => 'There was a problem with your community selection', |
); |
); |
return %alerts; |
return %alerts; |
} |
} |