--- loncom/interface/slotrequest.pm 2005/09/09 18:27:56 1.13 +++ loncom/interface/slotrequest.pm 2005/09/12 20:27:25 1.14 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Handler for requesting to have slots added to a students record # -# $Id: slotrequest.pm,v 1.13 2005/09/09 18:27:56 albertel Exp $ +# $Id: slotrequest.pm,v 1.14 2005/09/12 20:27:25 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -34,6 +34,7 @@ use Apache::Constants qw(:common :http : use Apache::loncommon(); use Apache::lonlocal; use Apache::lonnet; +use Date::Manip; sub fail { my ($r,$code)=@_; @@ -57,6 +58,7 @@ sub start_page { $r->print($html.''. &mt('Request another Worktime').''); $r->print(&Apache::loncommon::bodytag('Requesting another Worktime')); + $r->print('

'.$env{'form.command'}.'

'); } sub end_page { @@ -451,11 +453,18 @@ STUFF } sub show_table { - my ($r,$symb)=@_; + my ($r,$symb,$mgr)=@_; my ($cnum,$cdom)=&get_course(); my %slots=&Apache::lonnet::dump('slots',$cdom,$cnum); my $available; + if ($mgr eq 'F') { + $r->print('
+ + + +
'); + } $r->print(' @@ -485,6 +494,12 @@ sub show_table { } my $start=localtime($slots{$slot}->{'starttime'}); my $end=localtime($slots{$slot}->{'endtime'}); + my $unique; + if (ref($slots{$slot}{'uniqueperiod'})) { + $unique=localtime($slots{$slot}{'uniqueperiod'}[0]).','. + localtime($slots{$slot}{'uniqueperiod'}[1]); + } + $r->print(< @@ -495,13 +510,236 @@ sub show_table { - + STUFF } $r->print('
Slot name$slot$slots{$slot}->{'maxspace'} $ids $slots{$slot}->{'proctor'}$slots{$slot}->{'uniqueperiod'}$unique
'); } +sub upload_start { + my ($r,$symb)=@_; + $r->print(&Apache::grades::checkforfile_js()); + my $result.=''."\n"; + $result.='
'."\n"; + $result.=' '. + &mt('Specify a file containing the slot definitions.'). + '
'."\n"; + my $upfile_select=&Apache::loncommon::upfile_select_html(); + my $ignore=&mt('Ignore First Line'); + $result.=< + + +$upfile_select +
+ + +ENDUPFORM + $result.='
'."\n"; + $result.=''."\n"; + $r->print($result); +} + +sub csvuploadmap_header { + my ($r,$symb,$datatoken,$distotal)= @_; + my $javascript; + if ($env{'form.upfile_associate'} eq 'reverse') { + $javascript=&csvupload_javascript_reverse_associate(); + } else { + $javascript=&csvupload_javascript_forward_associate(); + } + + my $checked=(($env{'form.noFirstLine'})?' checked="checked"':''); + my $ignore=&mt('Ignore First Line'); + $r->print(< +

Identify fields

+Total number of records found in file: $distotal
+Enter as many fields as you can. The system will inform you and bring you back +to this page if the data selected is insufficient to create the slots.
+ + + + + + + + + +
+ +ENDPICK + return ''; + +} + +sub csvuploadmap_footer { + my ($request,$i,$keyfields) =@_; + $request->print(< + + +
+ +ENDPICK +} + +sub csvupload_javascript_reverse_associate { + my $error1=&mt('You need to specify the name, starttime, endtime and a type'); + return(<[0].','; } + chop($keyfields); + } else { + unshift(@fields,['none','']); + $i=&Apache::loncommon::csv_samples_select_table($r,\@records, + \@fields); + my %sone=&Apache::loncommon::record_sep($records[0]); + $keyfields=join(',',sort(keys(%sone))); + } + } + &csvuploadmap_footer($r,$i,$keyfields); + + return ''; +} + +sub csvupload_fields { + return (['name','Slot name'], + ['type','Type of slot'], + ['starttime','Start Time of slot'], + ['endtime','End Time of slot'], + ['ip','IP or DNS restriction'], + ['proctor','List of proctor ids'], + ['description','Slot Description'], + ['maxspace','Maximum number of reservations'], + ['symb','Resource Restriction'], + ['uniqueperiod','Date range of slot exclusion'], + ['secret','Secret word proctor uses to validate']); +} + +sub csv_upload_assign { + my ($r,$symb)= @_; + &Apache::loncommon::load_tmp_file($r); + my @slotdata = &Apache::loncommon::upfile_record_sep(); + if ($env{'form.noFirstLine'}) { shift(@slotdata); } + my %fields=&Apache::grades::get_fields(); + $r->print('

Creating Slots

'); + my $cname=$env{'course.'.$env{'request.course.id'}.'.num'}; + my $cdom=$env{'course.'.$env{'request.course.id'}.'.domain'}; + my $countdone=0; + foreach my $slot (@slotdata) { + my %slot; + my %entries=&Apache::loncommon::record_sep($slot); + my $domain; + my $name=$entries{$fields{'name'}}; + if ($entries{$fields{'type'}}) { + $slot{'type'}=$entries{$fields{'type'}}; + } else { + $slot{'type'}='preassigned'; + } + if ($entries{$fields{'starttime'}}) { + $slot{'starttime'}=&UnixDate($entries{$fields{'starttime'}},"%s"); + } + if ($entries{$fields{'endtime'}}) { + $slot{'endtime'}=&UnixDate($entries{$fields{'starttime'}},"%s"); + } + foreach my $key ('ip','proctor','description','maxspace', + 'secret','symb') { + if ($entries{$fields{$key}}) { + $slot{$key}=$entries{$fields{$key}}; + } + } + if ($entries{$fields{'uniqueperiod'}}) { + my ($start,$end)=split(',',$entries{$fields{'uniqueperiod'}}); + my @times=(&UnixDate($start,"%s"), + &UnixDate($end,"%s")); + $slot{'uniqueperiod'}=\@times; + } + + &Apache::lonnet::cput('slots',{$name=>\%slot},$cdom,$cname); + $r->print('.'); + $r->rflush(); + $countdone++; + } + $r->print("
Created $countdone slots\n"); + $r->print("
\n"); + &show_table($r,$symb); + return ''; +} + sub handler { my $r=shift; @@ -515,8 +753,24 @@ sub handler { } $env{'request.symb'}=$symb; my $vgr=&Apache::lonnet::allowed('vgr',$env{'request.course.id'}); + my $mgr=&Apache::lonnet::allowed('mgr',$env{'request.course.id'}); if ($env{'form.command'} eq 'showslots' && $vgr eq 'F') { - &show_table($r,$symb); + &show_table($r,$symb,$mgr); + } elsif ($env{'form.command'} eq 'uploadstart' && $mgr eq 'F') { + &upload_start($r,$symb); + } elsif ($env{'form.command'} eq 'csvuploadmap' && $mgr eq 'F') { + &csv_upload_map($r,$symb); + } elsif ($env{'form.command'} eq 'csvuploadassign' && $mgr eq 'F') { + if ($env{'form.associate'} ne 'Reverse Association') { + &csv_upload_assign($r,$symb); + } else { + if ( $env{'form.upfile_associate'} ne 'reverse' ) { + $env{'form.upfile_associate'} = 'reverse'; + } else { + $env{'form.upfile_associate'} = 'forward'; + } + &csv_upload_map($r,$symb); + } } else { my ($status) = &Apache::lonhomework::check_task_access('0'); if ($status eq 'CAN_ANSWER' ||