--- loncom/homework/lonhomework.pm 2016/09/16 14:44:14 1.344.2.6 +++ loncom/homework/lonhomework.pm 2019/02/19 15:38:36 1.344.2.8.4.3 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Homework handler # -# $Id: lonhomework.pm,v 1.344.2.6 2016/09/16 14:44:14 raeburn Exp $ +# $Id: lonhomework.pm,v 1.344.2.8.4.3 2019/02/19 15:38:36 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -260,7 +260,7 @@ sub check_slot_access { $num_usable_slots ++; if ($slot{'starttime'} < $now && $slot{'endtime'} > $now && - &Apache::loncommon::check_ip_acc($slot{'ip'})) { + &Apache::loncommon::check_slotip_acc($slot{'ip'})) { &Apache::lonxml::debug("$slot is good"); $slotstatus='NEEDS_CHECKIN'; $returned_slot=\%slot; @@ -1107,7 +1107,7 @@ sub editxmlmode {
'. &mt('Problem Editing').' '.&Apache::loncommon::help_open_topic('Problem_Editor_XML_Index'). -
'; + '
'; $result.=''. &Apache::structuretags::problem_edit_buttons('editxml'); @@ -1130,7 +1130,7 @@ sub editxmlmode { &mt("Miscellaneous"), misc_datastructure()); } - $result .= Apache::lonmenu::create_submenu("#", "", + $result .= Apache::lonmenu::create_submenu("#", "", &mt("Help") . ' ' . &mt(', helpmenu_datastructure(),""); @@ -1369,13 +1369,32 @@ sub newproblem { &File::Copy::copy($templatefilename,$dest); &renderpage($request,$dest); return; - + } + my $errormsg; if ($env{'form.template'}) { - my $file = $env{'form.template'}; - my $dest = &Apache::lonnet::filelocation("",$request->uri); - &File::Copy::copy($file,$dest); - &renderpage($request,$dest); - return; + my $file; + my ($extension) = ($env{'form.template'} =~ /\.(\w+)$/); + if ($extension) { + my @files = &get_template_list($extension); + foreach my $poss (@files) { + if (ref($poss) eq 'ARRAY') { + if ($env{'form.template'} eq $poss->[0]) { + $file = $env{'form.template'}; + last; + } + } + } + if ($file) { + my $dest = &Apache::lonnet::filelocation("",$request->uri); + &File::Copy::copy($file,$dest); + &renderpage($request,$dest); + return; + } else { + $errormsg = '

'.&mt('Invalid template file.').'

'; + } + } else { + $errormsg = '

'.&mt('Invalid template file; template needs to be a .problem, .library, or .task file.').'

'; + } } my ($extension) = ($request->uri =~ m/\.(\w+)$/); @@ -1392,7 +1411,6 @@ sub newproblem { } else { my $url=&HTML::Entities::encode($request->uri,'<>&"'); my $dest = &Apache::lonnet::filelocation("",$request->uri); - my $errormsg; my $instructions; my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), 'text' => 'Authoring Space'}, @@ -1442,6 +1460,41 @@ sub update_construct_style { } } +# +# Sets interval for current user so time left will be zero, either for the entire folder +# containing the current resource, or just the resource, depending on value of first item +# in interval array retrieved from EXT("resource.0.interval"); +# +sub zero_timer { + my ($symb) = @_; + my ($hastimeleft,$first_access,$now); + my @interval=&Apache::lonnet::EXT("resource.0.interval"); + if (@interval > 1) { + if ($interval[1] eq 'course') { + return; + } else { + my $now = time; + my $first_access=&Apache::lonnet::get_first_access($interval[1],$symb); + if ($first_access > 0) { + if ($first_access+$interval[0] > $now) { + my $done_time = $now - $first_access; + my $snum = 1; + if ($interval[1] eq 'map') { + $snum = 2; + } + my $result = + &Apache::lonparmset::storeparm_by_symb_inner($symb,'0_interval', + $snum,$done_time, + 'date_interval', + $env{'user.name'}, + $env{'user.domain'}); + return $result; + } + } + } + } + return; +} sub handler { #my $t0 = [&gettimeofday()]; @@ -1498,6 +1551,12 @@ sub handler { &newproblem($request); } } else { + # Set the event timer to zero if the "done button" was clicked. The button is + # part of the LCdoneButton form created in lonmenu.pm + if ($symb && $env{'form.LC_interval_done'} eq 'true') { + &zero_timer($symb); + undef($env{'form.LC_interval_done'}); + } # just render the page normally outside of construction space &Apache::lonxml::debug("not construct"); &renderpage($request,$file); @@ -1645,15 +1704,13 @@ sub default_xml_tag { sub helpmenu_datastructure { - my $width = 500; - my $height = 600; - + # filename, title, width, height my $helpers = [ - ['Problem_LON-CAPA_Functions', &mt('Script Functions')], - ['Greek_Symbols', &mt('Greek Symbols')], - ['Other_Symbols', &mt('Other Symbols')], - ['Authoring_Output_Tags', &mt('Output Tags')], - ['Authoring_Multilingual_Problems', &mt('Languages')], + ['Problem_LON-CAPA_Functions.hlp', &mt('Script Functions'), 800, 600], + ['Greek_Symbols.hlp', &mt('Greek Symbols'), 500, 600], + ['Other_Symbols.hlp', &mt('Other Symbols'), 500, 600], + ['Authoring_Output_Tags.hlp', &mt('Output Tags'), 800, 600], + ['Authoring_Multilingual_Problems.hlp', &mt('Languages'), 800, 600], ]; my $help_structure = []; @@ -1661,7 +1718,15 @@ sub helpmenu_datastructure { foreach my $count (0..(scalar(@{$helpers})-1)) { my $filename = $helpers->[$count]->[0]; my $title = $helpers->[$count]->[1]; - my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename.hlp',$width,$height,'yes');"); + my $width = $helpers->[$count]->[2]; + my $height = $helpers->[$count]->[3]; + if ($width eq '') { + $width = 500; + } + if ($height eq '') { + $height = 600; + } + my $href = &HTML::Entities::encode("javascript:openMyModal('/adm/help/$filename',$width,$height,'yes');"); push @{$help_structure}, [$href, $title, undef]; }