--- loncom/interface/lonrequestcourse.pm 2009/10/24 03:56:01 1.36.2.3 +++ 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.3 2009/10/24 03:56:01 raeburn Exp $ +# $Id: lonrequestcourse.pm,v 1.37 2009/10/24 03:24:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -234,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') { @@ -611,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; @@ -700,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'; @@ -723,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,