--- loncom/auth/lonroles.pm 2009/12/24 18:28:54 1.240.2.5 +++ loncom/auth/lonroles.pm 2010/12/05 16:35:58 1.240.2.21 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # User Roles Screen # -# $Id: lonroles.pm,v 1.240.2.5 2009/12/24 18:28:54 raeburn Exp $ +# $Id: lonroles.pm,v 1.240.2.21 2010/12/05 16:35:58 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -138,7 +138,7 @@ use Apache::lonannounce; use Apache::lonlocal; use Apache::lonpageflip(); use Apache::lonnavdisplay(); -use Apache::lonmainmenu(); +use Apache::loncoursequeueadmin; use GDBM_File; use LONCAPA qw(:DEFAULT :match); use HTML::Entities; @@ -165,6 +165,7 @@ sub redirect_user { my $start_page = &Apache::loncommon::start_page('Switching Role',undef, {'redirect' => [1,$url], 'bread_crumbs' => $brcrum,}); + &Apache::lonhtmlcommon::clear_breadcrumbs(); my $end_page = &Apache::loncommon::end_page(); # Note to style police: @@ -453,6 +454,12 @@ ENDENTERKEY &Apache::lonnet::appenv({'request.role.adv'=>$tadv}); my ($furl,$ferr)= &Apache::lonuserstate::readmap($cdom.'/'.$cnum); + if ($custommenu) { + unless (($ferr) || ($env{'form.switchrole'})) { + &Apache::lonnet::put('nohist_crslastlogin',{$env{'user.name'}.':'.$env{'user.domain'}.':'.$csec.':'.$role => $now}, + $cdom,$cnum); + } + } if (($env{'form.orgurl'}) && ($env{'form.orgurl'}!~/^\/adm\/flip/)) { my $dest=$env{'form.orgurl'}; @@ -493,7 +500,7 @@ ENDENTERKEY $courseid = substr($courseid, 1); } $courseid =~ s/\//_/; - if (($cdom ne 'gcitest') && (($role eq 'cc') || ($role eq 'co')) + if (($cdom !~ /^\w+citest$/) && (($role eq 'cc') || ($role eq 'co')) && ($env{'course.' . $courseid .'.course.helper.not.run'})) { $furl = "/adm/helper/course.initialization.helper"; # Send the user to the course they selected @@ -517,7 +524,7 @@ ENDENTERKEY .$env{'request.course.sec'}) ) { my $startpage = &courseloadpage($courseid); - unless (($startpage eq 'firstres') || ($cdom eq 'gcitest')) { + unless (($startpage eq 'firstres') || ($cdom =~ /^\w+citest$/)) { $msg = &mt('Entering [_1] ...', $env{'course.'.$courseid.'.description'}); &redirect_user($r,&mt('New in course'), @@ -532,7 +539,7 @@ ENDENTERKEY # Guess not ... $furl=&Apache::lonpageflip::first_accessible_resource(); } - if (($cdom eq 'gcitest') && ($custommenu)) { + if (($cdom =~ /^\w+citest$/) && ($custommenu)) { $furl = '/adm/navmaps'; } $msg = &mt('Entering [_1] ...', @@ -585,13 +592,12 @@ ENDENTERKEY return OK if $r->header_only; my ($crumbtext,$pagetitle,$recent,$show_course); - my $noscript=''.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'
'.&mt('As this is not the case, most functionality in the system will be unavailable.').'

'; + $show_course=&Apache::loncommon::show_course(); + my $noscript='
'.&mt('Use of LON-CAPA requires Javascript to be enabled in your web browser.').'
'.&mt('As this is not the case, most functionality in the system will be unavailable.').'

'; if ($custommenu) { - my $start_page = &Apache::loncommon::start_page('Main Menu',undef, - {'bread_crumbs' => 1}); + my $start_page = &Apache::loncommon::start_page('Main Menu'); $r->print(<<"ENDCUSTOM"); $start_page -
@@ -600,20 +606,28 @@ ENDCUSTOM $crumbtext = 'User Roles'; $pagetitle = 'My Roles'; $recent = &mt('Recent Roles'); - $show_course=&Apache::loncommon::show_course(); + my $standby=&mt('Role selected. Please stand by.'); if ($show_course) { $crumbtext = 'Courses'; $pagetitle = 'My Courses'; $recent = &mt('Recent Courses'); + $standby = &mt('Course selected. Please stand by.'); } - my $brcrum =[{href=>"/adm/roles",text=>$crumbtext}]; + my $brcrum = [{ href => '/adm/roles', + text => $crumbtext,}, + ]; + my $args; + if ($numdc) { + $args = {bread_crumbs => $brcrum}; + } else { + $args = {bread_crumbs => $brcrum, + bread_crumbs_menulink => '_nomenu'}; + } + my $start_page=&Apache::loncommon::start_page($pagetitle,undef,$args); my $swinfo=&Apache::lonmenu::rawconfig(); - my $start_page=&Apache::loncommon::start_page($pagetitle,undef,{bread_crumbs=>$brcrum}); - my $standby=&mt('Role selected. Please stand by.'); $standby=~s/\n/\\n/g; $r->print(< @@ -721,36 +735,34 @@ ENDHEADER $refresh = $now; &Apache::lonnet::appenv({'user.refresh.time' => $refresh}); + if (!$countactive && !$countfuture) { + if (&Apache::loncommon::new_roles_update()) { + ($countactive,$countfuture,$inrole,$possiblerole) = + &gather_roles($then,$refresh,$now,$reinit,$nochoose,\%roletext,\%sortrole, + \%roleclass,\%futureroles,\%timezones); + } + } if ($custommenu) { if ($env{'form.destinationurl'} eq '/adm/gci_info') { $r->print(&gci_info_page()). &Apache::loncommon::end_page(); return OK; } - my %courses = &Apache::loncommon::existing_gcitest_courses(); + my %courses = &Apache::loncommon::existing_gcitest_courses('cc'); $env{'browser.interface'}='faketextual'; $env{'environment.remote'}='off'; my $numcourses = keys(%courses); my $switcher; if ($numcourses > 0) { - $switcher = &Apache::lonmainmenu::gcitest_switcher(%courses); - my $current; - if ($env{'request.course.id'}) { - $current = 'cc./'.$env{'course.'.$env{'request.course.id'}.'.domain'}. - '/'.$env{'course.'.$env{'request.course.id'}.'.num'}; - } - my $switcher_js = &Apache::lonmainmenu::gcitest_switcher_js($current,$numcourses); - $r->print(<<"ENDSCRIPT"); - -ENDSCRIPT + $switcher = &Apache::loncommon::gcitest_switcher('cc',%courses); } $r->print(&Apache::lonmenu::inlinemenu('gcicustom',$switcher). &Apache::loncommon::end_page()); return OK; + } else { + if ($env{'form.destinationurl'} eq '/adm/gci_info') { + delete($env{'form.destinationurl'}); + } } if ($env{'user.adv'}) { $r->print('

' - .&mt('[_1]Visit the [_2]Course/Community Catalog[_3]' - .' to view all [_4] LON-CAPA courses and communities.' - ,'' - ,'' - ,'',$domdesc) - .'
' - .&mt('If a course or community is [_1]not[_2] in your list of current courses and communities below,' + unless ($env{'user.domain'} =~ /^\w+citest$/) { + $r->print( + '

' + .&mt('[_1]Visit the [_2]Course/Community Catalog[_3]' + .' to view all [_4] LON-CAPA courses and communities.' + ,'' + ,'' + ,'',$domdesc) + .'
' + .&mt('If a course or community is [_1]not[_2] in your list of current courses and communities below,' .' you may be able to enroll if self-enrollment is permitted.' ,'','') - .'

' - ); + .'

' + ); + } } } @@ -784,13 +798,31 @@ ENDSCRIPT if ($inrole) { $r->print('

'.&mt('Currently no additional roles, courses or communities').'

'); } else { - $r->print('

'.&mt('Currently no active roles, courses or communities').'

'); + if ($show_course) { + if ($env{'user.domain'} =~ /^\w+citest$/) { + $r->print('

'.&mt('Currently no active Concept Tests').'

'); + } elsif ($env{'user.domain'} =~ /ci$/) { + $r->print('

'.&mt('Currently not assigned as a GCI contributor').'

'); + } + } else { + $r->print('

'.&mt('Currently no active roles, courses or communities').'

'); + } } - &findcourse_advice($r); - &requestcourse_advice($r); + unless ($env{'user.domain'} =~ /^\w+citest$/) { + &findcourse_advice($r); + &requestcourse_advice($r); + } $r->print(''); if ($countfuture) { - $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture)); + if ($show_course) { + if ($env{'user.domain'} =~ /^\w+citest$/) { + $r->print(&mt('The following [quant,_1,Concept Test] will be available in the future:',$countfuture)); + } else { + $r->print(&mt('The following [quant,_1,course] will become active in the future:',$countfuture)); + } + } else { + $r->print(&mt('The following [quant,_1,role,roles] will become active in the future:',$countfuture)); + } my $doheaders = &roletable_headers($r,\%roleclass,\%sortrole, $nochoose); &print_rolerows($r,$doheaders,\%roleclass,\%sortrole,\%dcroles, @@ -839,7 +871,7 @@ ENDSCRIPT } } # ----------------------------------------------------------------------- Table - unless ((!&Apache::loncommon::show_course()) || ($nochoose) || ($countactive==1)) { + unless ((!$show_course) || ($nochoose) || ($countactive==1)) { $r->print("

".&mt('Select a Course to Enter')."

\n"); } if ($env{'form.destinationurl'}) { @@ -942,18 +974,21 @@ ENDSCRIPT sub gci_info_page { return <<"END"; +
+

Welcome to the Geoscience Concept Inventory WebCenter

Use the tabs to navigate the WebCenter and...

For more information about writing and reviewing Concept Inventory questions please refer to the GCI Workbook. - +

END } @@ -1062,7 +1097,7 @@ sub gather_roles { } elsif ($trest) { my $tcourseid=$tdom.'_'.$trest; $ttype = &Apache::loncommon::course_type($tcourseid); - $trole = &Apache::lonnet::plaintext($role,$ttype); + $trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid); if ($env{'course.'.$tcourseid.'.description'}) { $twhere=$env{'course.'.$tcourseid.'.description'}; $sortkey=$role."\0".$tdom."\0".$twhere."\0".$envkey; @@ -1081,7 +1116,7 @@ sub gather_roles { &Apache::loncommon::syllabuswrapper(&mt('Syllabus'),$trest,$tdom). ''; $ttype = $newhash{'type'}; - $trole = &Apache::lonnet::plaintext($role,$ttype); + $trole = &Apache::lonnet::plaintext($role,$ttype,$tcourseid); } else { $twhere=&mt('Currently not available'); $env{'course.'.$tcourseid.'.description'}=$twhere; @@ -1259,10 +1294,15 @@ sub findcourse_advice { } else { $r->print(&mt('If you were expecting to see an active role listed for a particular course, that course may not have been created yet.').'
'); } - $r->print('

'.&mt('Self-Enrollment').'

'. - '

'.&mt('The [_1]Course/Community Catalog[_2] provides information about all [_3] classes for which LON-CAPA courses have been created, as well as any communities in the domain.','','',$domdesc).'
'); - $r->print(&mt('You can search for courses and communities which permit self-enrollment, if you would like to enroll in one.').'

'); - &queued_selfenrollment($r); + my $queued = &Apache::loncoursequeueadmin::queued_selfenrollment(); + if ($queued) { + $r->print($queued); + } else { + $r->print(&mt('You have no request for contributor access pending approval by the GCI WebCenter team.').''); + } return; } @@ -1319,49 +1359,6 @@ sub requestcourse_advice { return; } -sub queued_selfenrollment { - my ($r) = @_; - my %selfenrollrequests = &Apache::lonnet::dump('selfenrollrequests'); - my %reqs_by_date; - foreach my $item (keys(%selfenrollrequests)) { - if (ref($selfenrollrequests{$item}) eq 'HASH') { - if ($selfenrollrequests{$item}{'status'} eq 'request') { - if ($selfenrollrequests{$item}{'timestamp'}) { - push(@{$reqs_by_date{$selfenrollrequests{$item}{'timestamp'}}},$item); - } - } - } - } - if (keys(%reqs_by_date)) { - my $rolename = &Apache::lonnet::plaintext('st'); - $r->print(''.&mt('Enrollment requests pending Course Coordinator approval').'
'. - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(). - ''.&mt('Date requested').''.&mt('Course title').''. - ''.&mt('User role').''.&mt('Section').''. - &Apache::loncommon::end_data_table_header_row()); - my @sorted = sort { $a <=> $b } (keys(%reqs_by_date)); - foreach my $item (@sorted) { - if (ref($reqs_by_date{$item}) eq 'ARRAY') { - foreach my $crs (@{$reqs_by_date{$item}}) { - my %courseinfo = &Apache::lonnet::coursedescription($crs); - my $usec = $selfenrollrequests{$crs}{'section'}; - if ($usec eq '') { - $usec = &mt('No section'); - } - $r->print(&Apache::loncommon::start_data_table_row(). - ''.&Apache::lonlocal::locallocaltime($item).''. - ''.$courseinfo{'description'}.''. - ''.$rolename.''.$usec.''. - &Apache::loncommon::end_data_table_row()); - } - } - } - $r->print(&Apache::loncommon::end_data_table()); - } - return; -} - sub privileges_info { my ($which) = @_; my $output; @@ -1702,7 +1699,7 @@ sub display_cc_role { $twhere=&mt('Currently not available'); $env{'course.'.$tcourseid.'.description'}=$twhere; } - my $trole = &Apache::lonnet::plaintext($ccrole,$ttype); + my $trole = &Apache::lonnet::plaintext($ccrole,$ttype,$tcourseid); $twhere.="
".&mt('Domain').":".$1; ($roletext,$roletext_end) = &build_roletext($trolecode,$1,$2,'is',$tryagain,$advanced,'',$tbg,$trole,$twhere,'','','',1,''); }