version 1.363, 2016/07/18 19:29:11
|
version 1.370, 2018/01/31 15:28:28
|
Line 190 sub proctor_checked_in {
|
Line 190 sub proctor_checked_in {
|
if ($type eq 'Task') { |
if ($type eq 'Task') { |
my $version=$Apache::lonhomework::history{'resource.0.version'}; |
my $version=$Apache::lonhomework::history{'resource.0.version'}; |
$key ="resource.$version.0.checkedin"; |
$key ="resource.$version.0.checkedin"; |
} elsif ($type eq 'problem') { |
} elsif (($type eq 'problem') || ($type eq 'tool')) { |
$key ='resource.0.checkedin'; |
$key ='resource.0.checkedin'; |
} |
} |
# backward compatability, used to be username@domain, |
# backward compatability, used to be username@domain, |
Line 205 sub proctor_checked_in {
|
Line 205 sub proctor_checked_in {
|
return 1; |
return 1; |
} |
} |
} |
} |
|
|
return 0; |
return 0; |
} |
} |
|
|
Line 214 sub check_slot_access {
|
Line 213 sub check_slot_access {
|
|
|
# does it pass normal muster |
# does it pass normal muster |
my ($status,$datemsg)=&check_access($id,$symb); |
my ($status,$datemsg)=&check_access($id,$symb); |
|
|
my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb); |
my $useslots = &Apache::lonnet::EXT("resource.0.useslots",$symb); |
if ($useslots ne 'resource' && $useslots ne 'map' |
if ($useslots ne 'resource' && $useslots ne 'map' |
&& $useslots ne 'map_map') { |
&& $useslots ne 'map_map') { |
Line 231 sub check_slot_access {
|
Line 230 sub check_slot_access {
|
my ($returned_slot,$slot_name,$checkinslot,$ipused,$blockip,$now,$ip, |
my ($returned_slot,$slot_name,$checkinslot,$ipused,$blockip,$now,$ip, |
$consumed_uniq); |
$consumed_uniq); |
$now = time; |
$now = time; |
$ip=$env{'request.host'} || $ENV{'REMOTE_ADDR'}; |
$ip=$ENV{'REMOTE_ADDR'} || $env{'request.host'}; |
|
|
if ($checkedin) { |
if ($checkedin) { |
$checkinslot = $Apache::lonhomework::history{"$checkin.slot"}; |
$checkinslot = $Apache::lonhomework::history{"$checkin.slot"}; |
Line 350 sub check_slot_access {
|
Line 349 sub check_slot_access {
|
$is_correct = |
$is_correct = |
($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass' |
($Apache::lonhomework::history{"resource.$version.0.status"} eq 'pass' |
|| $Apache::lonhomework::history{"resource.0.solved"} =~ /^correct_/ ); |
|| $Apache::lonhomework::history{"resource.0.solved"} =~ /^correct_/ ); |
} elsif ($type eq 'problem') { |
} elsif (($type eq 'problem') || ($type eq 'tool')) { |
if ((ref($partlist) eq 'ARRAY') && (@{$partlist} > 0)) { |
if ((ref($partlist) eq 'ARRAY') && (@{$partlist} > 0)) { |
my ($numcorrect,$numgraded) = (0,0); |
my ($numcorrect,$numgraded) = (0,0); |
foreach my $part (@{$partlist}) { |
foreach my $part (@{$partlist}) { |
Line 410 sub check_slot_access {
|
Line 409 sub check_slot_access {
|
# used to gain access to it to work on it, until the due date is reached, and the |
# used to gain access to it to work on it, until the due date is reached, and the |
# problem then becomes CLOSED. Therefore return the slotstatus - |
# problem then becomes CLOSED. Therefore return the slotstatus - |
# (which will be one of: NOT_IN_A_SLOT, RESERVABLE, RESERVABLE_LATER, or NOTRESERVABLE). |
# (which will be one of: NOT_IN_A_SLOT, RESERVABLE, RESERVABLE_LATER, or NOTRESERVABLE). |
if (!defined($slot_name) && $type eq 'problem') { |
|
|
if (!defined($slot_name) && (($type eq 'problem') || ($type eq 'tool'))) { |
if ($slotstatus eq 'NOT_IN_A_SLOT') { |
if ($slotstatus eq 'NOT_IN_A_SLOT') { |
if (!$num_usable_slots) { |
if (!$num_usable_slots) { |
if ($env{'request.course.id'}) { |
($slotstatus,$datemsg) = &check_reservable_slot($slotstatus,$symb,$now,$checkedin, |
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
$consumed_uniq); |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
unless ($symb) { |
|
($symb)=&Apache::lonnet::whichuser(); |
|
} |
|
$slotstatus = 'NOTRESERVABLE'; |
|
my ($reservable_now_order,$reservable_now,$reservable_future_order, |
|
$reservable_future) = |
|
&Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb); |
|
if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) { |
|
if (@{$reservable_now_order} > 0) { |
|
if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) { |
|
$slotstatus = 'RESERVABLE'; |
|
$datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'}; |
|
} else { |
|
my ($uniqstart,$uniqend,$useslot); |
|
if (ref($consumed_uniq) eq 'ARRAY') { |
|
($uniqstart,$uniqend)=@{$consumed_uniq}; |
|
} |
|
foreach my $slot (reverse(@{$reservable_now_order})) { |
|
if ($reservable_now->{$slot}{'uniqueperiod'} =~ /^(\d+)\,(\d+)$/) { |
|
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
|
next if (! |
|
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
|
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
|
} |
|
$useslot = $slot; |
|
last; |
|
} |
|
if ($useslot) { |
|
$slotstatus = 'RESERVABLE'; |
|
$datemsg = $reservable_now->{$useslot}{'endreserve'}; |
|
} |
|
} |
|
} |
|
} |
|
unless ($slotstatus eq 'RESERVABLE') { |
|
if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) { |
|
if (@{$reservable_future_order} > 0) { |
|
if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) { |
|
$slotstatus = 'RESERVABLE_LATER'; |
|
$datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'}; |
|
} else { |
|
my ($uniqstart,$uniqend,$useslot); |
|
if (ref($consumed_uniq) eq 'ARRAY') { |
|
($uniqstart,$uniqend)=@{$consumed_uniq}; |
|
} |
|
foreach my $slot (@{$reservable_future_order}) { |
|
if ($reservable_future->{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) { |
|
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
|
next if (! |
|
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
|
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
|
} |
|
$useslot = $slot; |
|
last; |
|
} |
|
if ($useslot) { |
|
$slotstatus = 'RESERVABLE_LATER'; |
|
$datemsg = $reservable_future->{$useslot}{'startreserve'}; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
} |
} |
} |
return ($slotstatus,$datemsg); |
return ($slotstatus,$datemsg); |
Line 501 sub check_slot_access {
|
Line 436 sub check_slot_access {
|
} |
} |
|
|
if (($is_correct) && ($blockip ne 'answer')) { |
if (($is_correct) && ($blockip ne 'answer')) { |
if ($type eq 'problem') { |
if (($type eq 'problem') || ($type eq 'tool')) { |
return ($status); |
return ($status); |
} |
} |
return ('SHOW_ANSWER'); |
return ('SHOW_ANSWER'); |
Line 515 sub check_slot_access {
|
Line 450 sub check_slot_access {
|
return ($slotstatus,$datemsg,$slot_name,$returned_slot,$ipused); |
return ($slotstatus,$datemsg,$slot_name,$returned_slot,$ipused); |
} |
} |
|
|
|
sub check_reservable_slot { |
|
my ($slotstatus,$symb,$now,$checkedin,$consumed_uniq) = @_; |
|
my $datemsg; |
|
if ($slotstatus eq 'NOT_IN_A_SLOT') { |
|
if ($env{'request.course.id'}) { |
|
my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; |
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
|
unless ($symb) { |
|
($symb)=&Apache::lonnet::whichuser(); |
|
} |
|
$slotstatus = 'NOTRESERVABLE'; |
|
my ($reservable_now_order,$reservable_now,$reservable_future_order, |
|
$reservable_future) = |
|
&Apache::loncommon::get_future_slots($cnum,$cdom,$now,$symb); |
|
if ((ref($reservable_now_order) eq 'ARRAY') && (ref($reservable_now) eq 'HASH')) { |
|
if (@{$reservable_now_order} > 0) { |
|
if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) { |
|
$slotstatus = 'RESERVABLE'; |
|
$datemsg = $reservable_now->{$reservable_now_order->[-1]}{'endreserve'}; |
|
} else { |
|
my ($uniqstart,$uniqend,$useslot); |
|
if (ref($consumed_uniq) eq 'ARRAY') { |
|
($uniqstart,$uniqend)=@{$consumed_uniq}; |
|
} |
|
foreach my $slot (reverse(@{$reservable_now_order})) { |
|
if ($reservable_now->{$slot}{'uniqueperiod'} =~ /^(\d+)\,(\d+)$/) { |
|
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
|
next if (! |
|
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
|
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
|
} |
|
$useslot = $slot; |
|
last; |
|
} |
|
if ($useslot) { |
|
$slotstatus = 'RESERVABLE'; |
|
$datemsg = $reservable_now->{$useslot}{'endreserve'}; |
|
} |
|
} |
|
} |
|
} |
|
unless ($slotstatus eq 'RESERVABLE') { |
|
if ((ref($reservable_future_order) eq 'ARRAY') && (ref($reservable_future) eq 'HASH')) { |
|
if (@{$reservable_future_order} > 0) { |
|
if ((!$checkedin) || (ref($consumed_uniq) ne 'ARRAY')) { |
|
$slotstatus = 'RESERVABLE_LATER'; |
|
$datemsg = $reservable_future->{$reservable_future_order->[0]}{'startreserve'}; |
|
} else { |
|
my ($uniqstart,$uniqend,$useslot); |
|
if (ref($consumed_uniq) eq 'ARRAY') { |
|
($uniqstart,$uniqend)=@{$consumed_uniq}; |
|
} |
|
foreach my $slot (@{$reservable_future_order}) { |
|
if ($reservable_future->{$slot}{'uniqueperiod'} =~ /^(\d+),(\d+)$/) { |
|
my ($new_uniq_start,$new_uniq_end) = ($1,$2); |
|
next if (! |
|
($uniqstart < $new_uniq_start && $uniqend < $new_uniq_start) || |
|
($uniqstart > $new_uniq_end && $uniqend > $new_uniq_end )); |
|
} |
|
$useslot = $slot; |
|
last; |
|
} |
|
if ($useslot) { |
|
$slotstatus = 'RESERVABLE_LATER'; |
|
$datemsg = $reservable_future->{$useslot}{'startreserve'}; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
} |
|
return ($slotstatus,$datemsg); |
|
} |
|
|
# JB, 9/24/2002: Any changes in this function may require a change |
# JB, 9/24/2002: Any changes in this function may require a change |
# in lonnavmaps::resource::getDateStatus. |
# in lonnavmaps::resource::getDateStatus. |
sub check_access { |
sub check_access { |
Line 1431 sub get_template_html {
|
Line 1441 sub get_template_html {
|
sub newproblem { |
sub newproblem { |
my ($request) = @_; |
my ($request) = @_; |
|
|
if ($env{'form.mode'} eq 'blank'){ |
if ($env{'form.mode'} eq 'blank'){ |
my $dest = &Apache::lonnet::filelocation("",$request->uri); |
my $dest = &Apache::lonnet::filelocation("",$request->uri); |
&File::Copy::copy('/home/httpd/html/res/adm/includes/templates/blank.problem',$dest); |
my $templatefilename = |
|
$request->dir_config('lonIncludes').'/templates/blank.problem'; |
|
&File::Copy::copy($templatefilename,$dest); |
&renderpage($request,$dest); |
&renderpage($request,$dest); |
return; |
return; |
} |
} |
|
my $errormsg; |
if ($env{'form.template'}) { |
if ($env{'form.template'}) { |
my $file = $env{'form.template'}; |
my $file; |
my $dest = &Apache::lonnet::filelocation("",$request->uri); |
my ($extension) = ($env{'form.template'} =~ /\.(\w+)$/); |
&File::Copy::copy($file,$dest); |
if ($extension) { |
&renderpage($request,$dest); |
my @files = &get_template_list($extension); |
return; |
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 = '<p class="LC_error">'.&mt('Invalid template file.').'</p>'; |
|
} |
|
} else { |
|
$errormsg = '<p class="LC_error">'.&mt('Invalid template file; template needs to be a .problem, .library, or .task file.').'</p>'; |
|
} |
} |
} |
|
|
my ($extension) = ($request->uri =~ m/\.(\w+)$/); |
my ($extension) = ($request->uri =~ m/\.(\w+)$/); |
Line 1459 sub newproblem {
|
Line 1490 sub newproblem {
|
} else { |
} else { |
my $url=&HTML::Entities::encode($request->uri,'<>&"'); |
my $url=&HTML::Entities::encode($request->uri,'<>&"'); |
my $dest = &Apache::lonnet::filelocation("",$request->uri); |
my $dest = &Apache::lonnet::filelocation("",$request->uri); |
my $errormsg; |
|
my $instructions; |
my $instructions; |
my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), |
my $brcrum = [{'href' => &Apache::loncommon::authorspace($request->uri), |
'text' => 'Authoring Space'}, |
'text' => 'Authoring Space'}, |
Line 1787 sub default_xml_tag {
|
Line 1817 sub default_xml_tag {
|
|
|
sub helpmenu_datastructure { |
sub helpmenu_datastructure { |
|
|
my $width = 500; |
# filename, title, width, height |
my $height = 600; |
|
|
|
my $helpers = [ |
my $helpers = [ |
['Problem_LON-CAPA_Functions', &mt('Script Functions')], |
['Problem_LON-CAPA_Functions.hlp', &mt('Script Functions'), 800, 600], |
['Greek_Symbols', &mt('Greek Symbols')], |
['Greek_Symbols.hlp', &mt('Greek Symbols'), 500, 600], |
['Other_Symbols', &mt('Other Symbols')], |
['Other_Symbols.hlp', &mt('Other Symbols'), 500, 600], |
['Authoring_Output_Tags', &mt('Output Tags')], |
['Authoring_Output_Tags.hlp', &mt('Output Tags'), 800, 600], |
['Authoring_Multilingual_Problems', |
['Authoring_Multilingual_Problems.hlp', |
&mt('How to create problems in different languages')] |
&mt('How to create problems in different languages'), 800, 600], |
|
['loncapa.html', &mt('Language reference'), 800, 600], |
]; |
]; |
|
|
my $help_structure = []; |
my $help_structure = []; |
Line 1804 sub helpmenu_datastructure {
|
Line 1833 sub helpmenu_datastructure {
|
foreach my $count (0..(scalar(@{$helpers})-1)) { |
foreach my $count (0..(scalar(@{$helpers})-1)) { |
my $filename = $helpers->[$count]->[0]; |
my $filename = $helpers->[$count]->[0]; |
my $title = $helpers->[$count]->[1]; |
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]; |
push @{$help_structure}, [$href, $title, undef]; |
} |
} |
|
|