--- loncom/interface/lonuserutils.pm 2010/01/20 17:41:25 1.97.2.4 +++ loncom/interface/lonuserutils.pm 2010/01/20 20:28:40 1.97.2.6 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Utility functions for managing LON-CAPA user accounts # -# $Id: lonuserutils.pm,v 1.97.2.4 2010/01/20 17:41:25 raeburn Exp $ +# $Id: lonuserutils.pm,v 1.97.2.6 2010/01/20 20:28:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -91,7 +91,7 @@ sub modifyuserrole { if ($setting eq 'course' || $context eq 'course') { $scope = '/'.$cid; $scope =~ s/\_/\//g; - if ($role ne 'cc' && $sec ne '') { + if (($role ne 'cc') && ($role ne 'co') && ($sec ne '')) { $scope .='/'.$sec; } } elsif ($context eq 'domain') { @@ -236,7 +236,6 @@ sub domain_roles_select { # # Role types my @roletypes = ('domain','author','course','community'); - my %lt = &role_type_names(); # # build up the menu information to be passed to @@ -248,6 +247,10 @@ sub domain_roles_select { foreach my $roletype (@roletypes) { # set up the text for this domain $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 if ($env{'form.roletype'} ne '') { $select_menus{$roletype}->{'default'} = $env{'form.showrole'}; @@ -272,7 +275,7 @@ sub domain_roles_select { &mt('Custom role'); } else { $select_menus{$roletype}->{'select2'}->{$role} = - &Apache::lonnet::plaintext($role); + &Apache::lonnet::plaintext($role,$crstype); } } $select_menus{$roletype}->{'select2'}->{'Any'} = &mt('Any'); @@ -292,7 +295,7 @@ sub hidden_input { } sub print_upload_manager_header { - my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission)=@_; + my ($r,$datatoken,$distotal,$krbdefdom,$context,$permission,$crstype)=@_; my $javascript; # if (! exists($env{'form.upfile_associate'})) { @@ -329,7 +332,7 @@ sub print_upload_manager_header { my $javascript_validations = &javascript_validations('upload',$krbdefdom,$password_choice,undef, $env{'request.role.domain'},$context, - $groupslist); + $groupslist,$crstype); my $checked=(($env{'form.noFirstLine'})?' checked="checked"':''); $r->print('
' .&mt('Total number of records found in file: [_1]' @@ -362,7 +365,7 @@ sub print_upload_manager_header { ############################################################### sub javascript_validations { my ($mode,$krbdefdom,$curr_authtype,$curr_authfield,$domain, - $context,$groupslist)=@_; + $context,$groupslist,$crstype)=@_; my %param = ( kerb_def_dom => $krbdefdom, curr_authtype => $curr_authtype, @@ -383,10 +386,11 @@ sub javascript_validations { if (($context eq 'course') || ($context eq 'domain')) { if ($context eq 'course') { if ($env{'request.course.sec'} eq '') { - $setsection_call = 'setSections(document.'.$param{'formname'}.');'; + $setsection_call = 'setSections(document.'.$param{'formname'}."'$crstype'".');'; + $setsections_js = &setsections_javascript($param{'formname'},$groupslist, - $mode); + $mode,'',$crstype); } else { $setsection_call = "'ok'"; } @@ -827,7 +831,7 @@ sub print_upload_manager_footer { .' '.&mt('Add a domain role').'' .' ' + .' '.&mt('Add a course/community role').'' .''; } elsif ($context eq 'author') { $Str .= &Apache::lonhtmlcommon::row_title( @@ -896,7 +900,7 @@ sub print_upload_manager_footer { .'
' - .&mt('Note: For large courses, this operation may be time consuming.') + .&mt('Note: This operation may be time consuming when adding several users.') .'
'; } $Str .= '=0) { @@ -1199,16 +1203,16 @@ sub default_role_selector { $options .= ' '; } 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 = - &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(). &Apache::loncommon::start_data_table_header_row(). '
'.$lt{'fors'}.'
'; @@ -3219,26 +3251,50 @@ sub section_picker { } sub results_header_row { - my ($rolefilter,$statusmode,$context,$permission,$mode) = @_; + my ($rolefilter,$statusmode,$context,$permission,$mode,$crstype) = @_; my ($description,$showfilter); if ($rolefilter ne 'Any') { $showfilter = $rolefilter; } if ($context eq 'course') { 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') { - $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') { - $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') { - $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 { 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 { - $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; @@ -3246,7 +3302,7 @@ sub results_header_row { if ($viewablesec ne '') { if ($env{'form.showrole'} eq 'st') { $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); } if (($env{'form.grpfilter'} ne 'all') && ($env{'form.grpfilter'} ne '')) { @@ -3334,19 +3390,29 @@ sub results_header_row { $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'}; - if ($coursefilter eq 'category') { - my $instcode = &instcode_from_coursefilter(); - if ($instcode eq '.') { + if ($env{'form.roletype'} eq 'course') { + if ($coursefilter eq 'category') { + 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').' - '; - } 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').' - '; + } elsif ($env{'form.roletype'} eq 'community') { + if ($coursefilter eq 'selected') { + $description .= &mt('Selected communities in domain').' - '; + } elsif ($coursefilter eq 'all') { + $description .= &mt('All communities in domain').' - '; + } } if ($statusmode eq 'Expired') { $description .= &mt('users with expired [_1] roles',$showfilter); @@ -3593,9 +3659,6 @@ sub print_first_users_upload_form { $str .= &Apache::lonhtmlcommon::start_pick_box() .&Apache::lonhtmlcommon::row_title(&mt('File')) - .''."\n" - .&mt('Please upload an UTF8 encoded file to ensure a correct character encoding in your classlist.')."\n" - .'
'."\n" .&Apache::loncommon::upfile_select_html() .&Apache::lonhtmlcommon::row_closure() .&Apache::lonhtmlcommon::row_title( @@ -3751,7 +3814,7 @@ sub upfile_drop_add { } my (%userlist,%modifiable_fields,@poss_roles); 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 ($context eq 'course' || $context eq 'author') { @poss_roles = &curr_role_permissions($context,'','',$crstype); @@ -4084,7 +4147,7 @@ sub upfile_drop_add { $role = 'cr_'.$env{'user.domain'}.'_'. $env{'user.name'}.'_'.$role; } - if ($role ne 'cc') { + if (($role ne 'cc') && ($role ne 'co')) { if (@secs > 1) { $multiple = 1; foreach my $sec (@secs) { @@ -4445,7 +4508,7 @@ sub update_user_list { } } elsif ($choice eq 'chgsec') { my (@newsecs,$revresult,$nochg,@retained); - if ($role ne 'cc') { + if (($role ne 'cc') && ($role ne 'co')) { @newsecs = split(/,/,$env{'form.newsecs'}); } # remove existing section if not to be retained. @@ -4700,7 +4763,7 @@ sub get_groupslist { } sub setsections_javascript { - my ($formname,$groupslist,$mode,$checkauth) = @_; + my ($formname,$groupslist,$mode,$checkauth,$crstype) = @_; my ($checkincluded,$finish,$rolecode,$setsection_js); if ($mode eq 'upload') { $checkincluded = 'formname.name == "'.$formname.'"'; @@ -4739,8 +4802,11 @@ sub setsections_javascript { } my %alerts = &Apache::lonlocal::texthash( 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.', + 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.', + inec => 'In each community, each user may only have one member role at a time.', youh => 'You had selected ', secs => 'sections.', plmo => 'Please modify your selections so they include no more than one section.', @@ -4751,7 +4817,7 @@ sub setsections_javascript { ); $setsection_js .= <<"ENDSECCODE"; -function setSections(formname) { +function setSections(formname,crstype) { var re1 = /^currsec_/; var groups = new Array($groupslist); for (var i=0;i