--- loncom/interface/lonrequestcourse.pm 2009/10/02 16:15:49 1.36.2.2 +++ loncom/interface/lonrequestcourse.pm 2009/10/24 03:24:13 1.37 @@ -1,7 +1,7 @@ # The LearningOnline Network # Request a course # -# $Id: lonrequestcourse.pm,v 1.36.2.2 2009/10/02 16:15:49 raeburn Exp $ +# $Id: lonrequestcourse.pm,v 1.37 2009/10/24 03:24:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -52,10 +52,6 @@ described at http://www.lon-capa.org. =item onload_action() -=item check_can_request() - -=item course_types() - =item print_main_menu() =item request_administration() @@ -238,8 +234,8 @@ sub handler { foreach my $item (@code_order) { $crosslistcode .= $env{'form.crosslist_'.$i.'_'.$item}; } - if ($crosslistcode ne '') { - ($codechk{$i}, my $rest) = + if ($crosslistcode ne '') { + ($codechk{$i}, my $rest) = &Apache::lonnet::auto_validate_instcode('',$dom,$crosslistcode); } unless ($codechk{$i} eq 'valid') { @@ -277,7 +273,7 @@ sub handler { my $loaditems = &onload_action($action,$state); my %can_request; - my $canreq = &check_can_request($dom,\%can_request); + my $canreq = &Apache::lonnet::check_can_request($dom,\%can_request); if ($action eq 'new') { if ($canreq) { if ($state eq 'crstype') { @@ -594,52 +590,9 @@ sub onload_action { return \%loaditems; } -sub check_can_request { - my ($dom,$can_request) = @_; - my $canreq = 0; - my ($types,$typename) = &course_types(); - my @options = ('approval','validate','autolimit'); - my $optregex = join('|',@options); - if ((ref($can_request) eq 'HASH') && (ref($types) eq 'ARRAY')) { - foreach my $type (@{$types}) { - if (&Apache::lonnet::usertools_access($env{'user.name'}, - $env{'user.domain'}, - $type,undef,'requestcourses')) { - $canreq ++; - if ($dom eq $env{'user.domain'}) { - $can_request->{$type} = 1; - } - } - if ($env{'environment.reqcrsotherdom.'.$type} ne '') { - my @curr = split(',',$env{'environment.reqcrsotherdom.'.$type}); - if (@curr > 0) { - $canreq ++; - unless ($dom eq $env{'user.domain'}) { - if (grep(/^\Q$dom\E:($optregex)(=?\d*)$/,@curr)) { - $can_request->{$type} = 1; - } - } - } - } - } - } - return $canreq; -} - -sub course_types { - my @types = ('unofficial'); - my %typename = ( - official => 'Official course', - unofficial => 'Unofficial course', - community => 'Community', - ); - return (\@types,\%typename); -} - - sub print_main_menu { my ($r,$can_request,$states,$dom,$jscript,$loaditems,$crumb) = @_; - my ($types,$typename) = &course_types(); + my ($types,$typename) = &Apache::loncommon::course_types(); my $onchange; unless ($env{'form.interface'} eq 'textual') { $onchange = 1; @@ -658,31 +611,8 @@ sub print_main_menu { } } - my $standby=&mt('Course selected. Please stand by.'); my $js = <<"END"; -function enterrole (thisform,rolecode,buttonname) { - document.title='$standby'; - window.status='$standby'; - thisform.newrole.value=rolecode; - thisform.selectrole.value='1'; - thisform.submit(); -} - -function ToSyllabus(cdom,cnum) { - if (cdom == '' || cdom == null) { - return; - } - if (cnum == '' || cnum == null) { - return; - } - var options = 'height=600,width=800,resizable=yes,scrollbars=yes,location=no,menubar=no,toolbar=no'; - var url = "/public/"+cdom+"/"+cnum+"/syllabus"; - syllwin = window.open(url,'',options,1); - syllwin.focus(); - return; -} - function nextPage(formname) { var crschoice = document.mainmenu_coursetype.crstype.value; var actionchoice = document.mainmenu_action.action.value; @@ -747,20 +677,18 @@ END } END - $r->print(&header('Concept Test Courses',$js.$jscript,$loaditems).$crumb); - my $existing = &existing_courses(); - if ($existing) { - $r->print('
'. - '

'.&mt('Request creation of a new course').'

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

'.&mt('Request creation of a new course, or review your pending course requests.').'

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

'. + + $r->print(&header('Course Requests',$js.$jscript,$loaditems).$crumb. + '

'.&mt('Request creation of a new course, or review your pending course requests.').'

'. + '
'. &Apache::lonhtmlcommon::start_pick_box(). &Apache::lonhtmlcommon::row_title(&mt('Course Domain')). - '
'); - $r->print('GCI Web Center Concept Test Delivery (gcitest)'."\n". - ''); + ''. + &Apache::loncommon::select_dom_form($dom,'showdom','',1,$onchange)); + if (!$onchange) { + $r->print(' '); + } $r->print('
'.&Apache::lonhtmlcommon::row_closure()); my $formname = 'requestcrs'; @@ -770,213 +698,38 @@ END '. &Apache::lonhtmlcommon::row_closure(1). - &Apache::lonhtmlcommon::row_title(&mt('Course Type')). - &mt($typename->{'unofficial'})."\n". - '
'."\n". - '
'."\n". + &Apache::lonhtmlcommon::row_title(&mt('Course Type')).' +
+
'."\n". &Apache::lonhtmlcommon::row_closure(1)."\n". - &Apache::lonhtmlcommon::end_pick_box().'

'."\n". - '

'."\n". + &Apache::lonhtmlcommon::end_pick_box().'
'."\n". + '
'."\n". ''."\n". ''."\n". ''."\n". ''."\n". ''."\n". - '

'); - if ($existing) { - $r->print('

'.&mt('Enter an existing Concept Test course').'

'.$existing.'
'); - } else { - $r->print('
'); - } + '
'); $r->print(&Apache::loncommon::end_page()); return; } -sub existing_courses { - my $output; - my %roleshash = &Apache::lonnet::get_my_roles(undef,undef,'userroles',undef, - ['cc'],['gcitest']); - my %courses; - if (keys(%roleshash) > 0) { - foreach my $key (keys(%roleshash)) { - my ($cnum,$cdom,$role) = split(':',$key); - my ($tstart,$tend) = split(':',$roleshash{$key}); - my %coursehash = &Apache::lonnet::coursedescription($cdom.'/'.$cnum); - $courses{$cdom.'_'.$cnum}{'description'} = $coursehash{'description'}; - $courses{$cdom.'_'.$cnum}{'owner'} = $coursehash{'internal.courseowner'}; - if (defined($coursehash{'default_enrollment_start_date'}) ) { - $courses{$cdom.'_'.$cnum}{'startaccess'} = - &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_start_date'}); - } - if (defined($coursehash{'default_enrollment_end_date'}) ) { - $courses{$cdom.'_'.$cnum}{'endaccess'} = - &Apache::lonlocal::locallocaltime($coursehash{'default_enrollment_end_date'}); - if ($coursehash{'default_enrollment_end_date'} == 0) { - $courses{$cdom.'_'.$cnum}{'endaccess'} = &mt('No ending date'); - } - } - } - $output = '
'. - &Apache::loncommon::start_data_table(). - &Apache::loncommon::start_data_table_header_row(); - my @coltitles = ('Select','Title','Owner(s)', - 'Default Access Dates for Students','Student Counts'); - foreach my $item (@coltitles) { - $output .= ''; - if ($item eq 'Select') { - $output .= '  '; - } else { - $output .= &mt($item); - } - $output .= ''; - } - $output .= &Apache::loncommon::end_data_table_header_row(); - my %courseinfo = &build_courseinfo_hash(\%courses); - my %Sortby; - foreach my $course (sort(keys(%courses))) { - my $clean_title = $courseinfo{$course}{'title'}; - $clean_title =~ s/\W+//g; - if ($clean_title eq '') { - $clean_title = $courseinfo{$course}{'title'}; - } - push(@{$Sortby{$clean_title}},$course); - } - my @sorted_courses; - my @sorted_courses = sort { lc($a) cmp lc($b) } (keys(%Sortby)); - foreach my $item (@sorted_courses) { - foreach my $course (@{$Sortby{$item}}) { - my ($cdom,$cnum) = split('_',$course); - $output.= &Apache::loncommon::start_data_table_row(). - &courseinfo_row($courseinfo{$course},$cnum,$cdom). - &Apache::loncommon::end_data_table_row(); - } - } - $output .= &Apache::loncommon::end_data_table(). - ''. - '
'; - } - return $output; -} - -sub build_courseinfo_hash { - my ($courses) = @_; - my %courseinfo; - foreach my $course (keys(%{$courses})) { - my ($cdom,$cnum) = split('_',$course); - my $descr; - if (ref($courses->{$course}) eq 'HASH') { - $descr = $courses->{$course}{'description'}; - } - my $cleandesc=&HTML::Entities::encode($descr,'<>&"'); - $cleandesc=~s/'/\\'/g; - $cleandesc =~ s/^\s+//; - my ($cdom,$cnum)=split(/\_/,$course); - my ($singleowner,@owners,%ownernames); - if (ref($courses->{$course}) eq 'HASH') { - $singleowner = $courses->{$course}{'owner'}; - push(@owners,$singleowner); - if (ref($courses->{$course}{'co-owners'}) eq 'ARRAY') { - foreach my $item (@{$courses->{$course}{'co-owners'}}) { - push(@owners,$item); - } - } - } - foreach my $owner (@owners) { - my ($ownername,$ownerdom); - if ($owner =~ /:/) { - ($ownername,$ownerdom) = split(/:/,$owner); - } else { - $ownername = $owner; - if ($owner ne '') { - $ownerdom = $cdom; - } - } - if ($ownername ne '' && $ownerdom ne '') { - my %namehash=&Apache::loncommon::getnames($ownername,$ownerdom); - $ownernames{$ownername.':'.$ownerdom} = \%namehash; - } - } - $courseinfo{$course}{'cdom'} = $cdom; - $courseinfo{$course}{'cnum'} = $cnum; - my @lastnames; - foreach my $owner (keys(%ownernames)) { - if (ref($ownernames{$owner}) eq 'HASH') { - push(@lastnames,$ownernames{$owner}{'lastname'}); - } - } - $courseinfo{$course}{'ownerlastnames'} = join(', ',sort(@lastnames)); - $courseinfo{$course}{'title'} = $cleandesc; - $courseinfo{$course}{'owner'} = $singleowner; - my @classids; - $courseinfo{$course}{'counts'} = &count_students($cdom,$cnum,0); - my $startaccess = $courses->{$course}{'startaccess'}; - my $endaccess = $courses->{$course}{'endaccess'}; - my $accessdates; - if ($startaccess) { - $accessdates .= ''.&mt('From:[_1]',' '.$startaccess).'
'; - } - if ($endaccess) { - $accessdates .= ''.&mt('To:[_1]',' '.$endaccess).'
'; - } - $courseinfo{$course}{'access'} = $accessdates; - } - return %courseinfo; -} - -sub courseinfo_row { - my ($info,$cnum,$cdom) = @_; - my $output; - if (ref($info) eq 'HASH') { - my $rolecode = 'cc./'.$cdom.'/'.$cnum; - my $buttonname = $rolecode; - $buttonname=~s/\W//g; - $output .= ''. - ''.$info->{'title'}.' '. - ''. - &mt('Syllabus').''. - ''.$info->{'ownerlastnames'}.''. - ''.$info->{'access'}.''. - ''.$info->{'counts'}.''; - } else { - $output = ''.&mt('No information available for [_1].', - $cdom.'_'.$cnum).''; - return $output; - } - return $output; -} - -sub count_students { - my ($cdom,$cnum,$numsec) = @_; - my $classlist = &Apache::loncoursedata::get_classlist($cdom,$cnum); - my %student_count = ( - Active => 0, - Future => 0, - Expired => 0, - ); - my %idx; - $idx{'status'} = &Apache::loncoursedata::CL_STATUS(); - my %status_title = &Apache::lonlocal::texthash( - Expired => 'Previous access', - Active => 'Current access', - Future => 'Future access', - ); - - while (my ($student,$data) = each(%$classlist)) { - $student_count{$data->[$idx{'status'}]} ++; - } - - my $countslist = &mt('[quant,_1,section:,sections:,No sections]',$numsec).'
'; - foreach my $status ('Active','Future') { - $countslist .= ''.$status_title{$status}.': '. - $student_count{$status}.'
'; - } - return $countslist; -} - - sub request_administration { my ($r,$action,$state,$page,$states,$dom,$jscript,$loaditems,$crumb, $newinstcode,$codechk,$checkedcode,$description,$invalidcrosslist, @@ -1951,7 +1704,7 @@ sub print_request_status { my %statusinfo = &Apache::lonnet::dump('courserequests',$env{'user.domain'}, $env{'user.name'},'^status:'.$dom); my ($output,$formname,%queue_by_date); - my ($types,$typenames) = &course_types(); + my ($types,$typenames) = &Apache::loncommon::course_types(); foreach my $key (keys(%statusinfo)) { if (($statusinfo{$key} eq 'approval') || ($statusinfo{$key} eq 'pending')) { (undef,my($cdom,$cnum)) = split(':',$key); @@ -2073,7 +1826,7 @@ sub print_cancel_request { } $output = &mt('No further action will be taken'); } elsif (ref($history{'details'}) eq 'HASH') { - my ($types,$typename) = &course_types(); + my ($types,$typename) = &Apache::loncommon::course_types(); my $showtype = $crstype; if (defined($typename->{$crstype})) { $showtype = $typename->{$crstype}; @@ -2159,7 +1912,7 @@ sub print_request_logs { sub print_review { my ($dom,$codetitles,$cat_titles,$cat_order,$code_order,$uname,$udom, $disallowed,$disallowmsg) = @_; - my ($types,$typename) = &course_types(); + my ($types,$typename) = &Apache::loncommon::course_types(); my ($owner,$ownername,$owneremail); if ($uname eq '' || $udom eq '') { $uname = $env{'user.name'}; @@ -2625,7 +2378,7 @@ sub get_course_dom { } } if (($env{'user.domain'} ne '') && ($env{'user.domain'} ne 'public')) { - my ($types,$typename) = &course_types(); + my ($types,$typename) = &Apache::loncommon::course_types(); if (ref($types) eq 'ARRAY') { foreach my $type (@{$types}) { if (&Apache::lonnet::usertools_access($env{'user.name'}, @@ -3290,7 +3043,7 @@ sub check_autolimit { my ($uname,$udom,$dom,$crstype,$limit,$message) = @_; my %crsroles = &Apache::lonnet::get_my_roles($env{'user.name'},$env{'user.domain'}, 'userroles',['active','future'],['cc'],[$dom]); - my ($types,$typename) = &course_types(); + my ($types,$typename) = &Apache::loncommon::course_types(); my %requests = &Apache::lonnet::dumpstore('courserequests',$udom,$uname); my %count; if (ref($types) eq 'ARRAY') {