--- loncom/interface/loncommon.pm 2010/01/06 22:53:58 1.925.2.7 +++ loncom/interface/loncommon.pm 2010/09/19 18:50:48 1.925.2.13 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # a pile of common routines # -# $Id: loncommon.pm,v 1.925.2.7 2010/01/06 22:53:58 raeburn Exp $ +# $Id: loncommon.pm,v 1.925.2.13 2010/09/19 18:50:48 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1978,7 +1978,16 @@ sub select_dom_form { ($dom eq $defdom ? 'selected="selected" ' : '').'>'.$dom; if ($showdomdesc) { if ($dom ne '') { - my $domdesc = &Apache::lonnet::domain($dom,'description'); + my $domdesc; + if ($name eq 'srchdomain') { + if ($dom eq 'gci') { + $domdesc = 'Faculty'; + } else { + $domdesc = 'Students'; + } + } else { + $domdesc = &Apache::lonnet::domain($dom,'description'); + } if ($domdesc ne '') { $selectdomain .= ' ('.$domdesc.')'; } @@ -2469,9 +2478,11 @@ sub authform_internal{ } $autharg = ''; - $result = &mt - ('[_1] Internally authenticated (with initial password [_2])', - ''.$autharg); + my $authtext = '[_1] Internally authenticated (with initial password [_2])'; + if ($in{'caller'} eq 'requestcrs') { + $authtext = "[_1] Students' password, if none in the uploaded file: [_2]"; + } + $result = &mt($authtext,''.$autharg); $result.="'; return $result; } @@ -4943,6 +4954,26 @@ table#LC_title_bar.LC_with_remote { margin: 0; } +dl.LC_GCI_Menu { + width:300px; + float:left; + margin-right:2em; +} + +dl.LC_GCI_Menu dt { + font-weight: bold; + font-size:0.9em; + margin-bottom:0.7em; +} + +dl.LC_GCI_Menu dd { + font-size:0.8em; + margin:0 0 2em 0; + padding-left:4.5em; + line-height:1.5em; + background:none no-repeat left top; +} + /* #SD START (work in progress)*/ ul.LC_bct { @@ -7702,9 +7733,9 @@ sub user_picker { 'whse' => "When searching by last,first you must include at least one character in the first name.", 'thfo' => "The following need to be corrected before the search can be run:", ); - my $domform = &select_dom_form($currdom,'srchdomain',1,1); + my $domform = &select_dom_form($currdom,'srchdomain',undef,1); my $srchinsel = ' \n"; @@ -7763,9 +7795,9 @@ sub user_picker { ); $new_user_create = '

' .&mt("You are not authorized to create new $usertypetext{$usertype} users in this domain.") - .' ' - .&mt('Please contact the [_1]helpdesk[_2] for assistance.' - ,'','') + .'
' + .&mt('Enter a valid e-mail address as the username for the new user.').' '.&mt('Please contact the [_1]helpdesk[_2] for assistance.' + ,'','') .'


'; } } @@ -10050,19 +10082,19 @@ sub check_clone { my $clonehome=&Apache::lonnet::homeserver($clonecrsunum,$clonecrsudom); my $clonemsg; my $can_clone = 0; - my $lctype = lc($args->{'type'}); + my $lctype = lc($args->{'crstype'}); if ($lctype ne 'community') { $lctype = 'course'; } if ($clonehome eq 'no_host') { - if ($args->{'type'} eq 'Community') { + if ($args->{'crstype'} eq 'Community') { $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a non-existent community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); } else { $clonemsg = &mt('No new course created.').$linefeed.&mt('A new course could not be cloned from the specified original - [_1] - because it is a non-existent course.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); } } else { my %clonedesc = &Apache::lonnet::coursedescription($cloneid,{'one_time' => 1}); - if ($args->{'type'} eq 'Community') { + if ($args->{'crstype'} eq 'Community') { if ($clonedesc{'type'} ne 'Community') { $clonemsg = &mt('No new community created.').$linefeed.&mt('A new community could not be cloned from the specified original - [_1] - because it is a course not a community.',$args->{'clonecourse'}.':'.$args->{'clonedomain'}); return ($can_clone, $clonemsg, $cloneid, $clonehome); @@ -10081,7 +10113,7 @@ sub check_clone { $can_clone = 1; } else { my $ccrole = 'cc'; - if ($args->{'type'} eq 'Community') { + if ($args->{'crstype'} eq 'Community') { $ccrole = 'co'; } my %roleshash = @@ -10092,7 +10124,7 @@ sub check_clone { if (($roleshash{$args->{'clonecourse'}.':'.$args->{'clonedomain'}.':'.$ccrole}) || (grep(/^\Q$args->{'ccuname'}\E:\Q$args->{'ccdomain'}\E$/,@cloners))) { $can_clone = 1; } else { - if ($args->{'type'} eq 'Community') { + if ($args->{'crstype'} eq 'Community') { $clonemsg = &mt('No new community created.').$linefeed.&mt('The new community could not be cloned from the existing community because the new community owner ([_1]) does not have cloning rights in the existing community ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}); } else { $clonemsg = &mt('No new course created.').$linefeed.&mt('The new course could not be cloned from the existing course because the new course owner ([_1]) does not have cloning rights in the existing course ([_2]).',$args->{'ccuname'}.':'.$args->{'ccdomain'},$clonedesc{'description'}); @@ -10431,6 +10463,21 @@ sub construct_course { $outcome .= ($fatal?$errtext:'write ok').$linefeed; } + if ($args->{'cloneroster'}) { + my ($numadded,$clisterror) = &Apache::lonclonecourse::copyroster($cloneid,$$courseid,$args->{'startaccess'},$args->{'endaccess'}); + if ($clisterror) { + $outcome .= "\0".&mt('An error occurred when copying the student roster from the old course to the new course; the error was: [_1].',$clisterror).$linefeed; + if ($numadded) { + $outcome .= &mt('Although [quant,_1,student] have received roles in the new course the roster does not report this. It is ').$linefeed; + } + } else { + if ($numadded) { + $outcome .= "\0".&mt('[quant,_1,student] copied from roster for old course to roster for new course.',$numadded).$linefeed; + } else { + $outcome .= "\0".&mt('No students have been enrolled in the new Concept Test.').' '.&mt('This is because either (a) an error occurred, or (b) there were no students with either current access or access which ended on/after the current default end date set for access to the old course.').$linefeed; + } + } + } return (1,$outcome); } @@ -10697,6 +10744,60 @@ sub _add_to_env { } } +sub new_roles_update { + my $rolecount = 0; + foreach my $envkey (keys(%env)) { + next unless ($envkey =~ /^user\.role\./); + $rolecount ++; + } + my $newrolecount = 0; + if (!$rolecount) { + my %userenv; + foreach my $crstype ('official','unofficial','community') { + $userenv{'canrequest.'.$crstype} = + &Apache::lonnet::usertools_access($env{'user.name'}, + $env{'user.domain'},$crstype,'reload','requestcourses'); + } + my $then=$env{'user.login.time'}; + my $refresh=time; + my (%userroles,%allroles,%allgroups,@newroles); + my %roleshash = + &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'},'userroles',['active','future','previous'],undef,undef,1); + foreach my $item (keys(%roleshash)) { + my ($uname,$udom,$role,$section) = split(':',$item); + my $where = '/'.$udom.'/'.$uname; + my ($tstart,$tend) = split(':',$roleshash{$item}); + if ($section ne '') { + $where .= '/'.$section; + } + my $spec = $role.'.'.$where; + &Apache::lonnet::set_arearole($role,$where,$tstart,$tend, + $env{'user.domain'},$env{'user.name'}); + $userroles{'user.role.'.$spec} = $tstart.'.'.$tend; + $newrolecount ++; + unless (grep(/^\Q$role\E$/,@newroles)) { + push(@newroles,$role); + } + my $status = + &Apache::lonnet::curr_role_status($tstart,$tend,$refresh,$then); + if ($status eq 'active') { + &Apache::lonnet::gather_roleprivs(\%allroles,\%allgroups,\%userroles, + $where,$role,$tstart,$tend); + } + } + if (@newroles) { + my ($author,$adv) = &Apache::lonnet::set_userprivs(\%userroles,\%allroles, + \%allgroups); + &Apache::lonnet::appenv(\%userroles,[@newroles,'cm']); + $userenv{'user.adv'} = $adv; + $userenv{'user.author'} = $author; + $userenv{'user.refresh.time'} = $refresh; + } + &Apache::lonnet::appenv(\%userenv); + } + return $newrolecount; +} + # --- Get the symbolic name of a problem and the url sub get_symb { my ($request,$silent) = @_;