--- loncom/homework/structuretags.pm 2024/03/03 22:51:31 1.512.2.24.2.15
+++ loncom/homework/structuretags.pm 2023/09/11 13:46:11 1.512.2.25
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# definition of tags that give a structure to a document
#
-# $Id: structuretags.pm,v 1.512.2.24.2.15 2024/03/03 22:51:31 raeburn Exp $
+# $Id: structuretags.pm,v 1.512.2.25 2023/09/11 13:46:11 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -62,14 +62,13 @@ use Apache::lonxml;
use Apache::londefdef;
use Apache::lonenc();
use Apache::loncommon();
-use Apache::lonnavmaps;
use Time::HiRes qw( gettimeofday tv_interval );
use HTML::Entities();
use lib '/home/httpd/lib/perl/';
use LONCAPA;
BEGIN {
- &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','print','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));
+ &Apache::lonxml::register('Apache::structuretags',('block','languageblock','translated','instructorcomment','while','randomlist','problem','library','web','tex','part','preduedate','postanswerdate','solved','notsolved','problemtype','startpartmarker','startouttext','endpartmarker','endouttext','simpleeditbutton','definetag'));
}
@@ -194,28 +193,6 @@ sub end_web {
return '';
}
-sub start_print {
- my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
- if ($target ne 'edit' && $target ne 'modified') {
- if ($target ne 'tex') {
- my $skip = &Apache::lonxml::get_all_text("/print",$parser,$style);
- &Apache::lonxml::debug("skipping ahead :$skip: $$parser[-1]");
- }
- } elsif ($target eq "edit") {
- my $bodytext = &Apache::lonxml::get_all_text_unbalanced("/print",$parser);
- my $result = &Apache::edit::tag_start($target,$token);
- $result .= &Apache::edit::editfield($token->[1],$bodytext,'',80,1);
- return $result;
- } elsif ($target eq "modified") {
- return $token->[4].&Apache::edit::modifiedfield("/print",$parser);
- }
- return '';
-}
-
-sub end_print {
- return '';
-}
-
sub start_tex {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$style)=@_;
my $result='';
@@ -295,7 +272,7 @@ sub homework_js {
}
return &Apache::loncommon::resize_textarea_js().
&Apache::loncommon::colorfuleditor_js().
- &Apache::lonxml::setmode_javascript().
+ &setmode_javascript().
<<"JS";
+ENDSCRIPT
+}
+
sub page_start {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval,$name,
$extra_head)=@_;
@@ -428,7 +420,7 @@ sub page_start {
if (&Apache::lonhtmlcommon::htmlareabrowser()) {
my %textarea_args;
if (($env{'request.state'} ne 'construct') ||
- (&Apache::loncommon::nocodemirror())) {
+ ($env{'environment.nocodemirror'})) {
%textarea_args = (
dragmath => 'math',
);
@@ -536,25 +528,23 @@ sub page_start {
} elsif (!defined($found{'body'})
&& $env{'request.state'} eq 'construct') {
if ($target eq 'web' || $target eq 'edit') {
- unless ($env{'form.inhibitmenu'} eq 'yes') {
- # Breadcrumbs for Authoring Space
- &Apache::lonhtmlcommon::clear_breadcrumbs();
- &Apache::lonhtmlcommon::add_breadcrumb({
- 'text' => 'Authoring Space',
- 'href' => &Apache::loncommon::authorspace($env{'request.uri'}),
- });
- # breadcrumbs (and tools) will be created
- # in start_page->bodytag->innerregister
+ # Breadcrumbs for Authoring Space
+ &Apache::lonhtmlcommon::clear_breadcrumbs();
+ &Apache::lonhtmlcommon::add_breadcrumb({
+ 'text' => 'Authoring Space',
+ 'href' => &Apache::loncommon::authorspace($env{'request.uri'}),
+ });
+ # breadcrumbs (and tools) will be created
+ # in start_page->bodytag->innerregister
# FIXME Where are we?
-# &Apache::lonhtmlcommon::add_breadcrumb({
-# 'text' => 'Problem Editing', # 'Problem Testing'
-# 'href' => '',
-# });
- $pageheader = &Apache::loncommon::head_subbox(
- &Apache::loncommon::CSTR_pageheader());
- }
- }
+# &Apache::lonhtmlcommon::add_breadcrumb({
+# 'text' => 'Problem Editing', # 'Problem Testing'
+# 'href' => '',
+# });
+ $pageheader =&Apache::loncommon::head_subbox(
+ &Apache::loncommon::CSTR_pageheader());
+ }
} elsif (!defined($found{'body'})) {
my %add_entries;
my $background=&Apache::lonxml::get_param('background',$parstack,
@@ -609,9 +599,7 @@ sub page_start {
my ($symb,$courseid,$udom,$uname)=&Apache::lonnet::whichuser();
my ($path,$multiresp) =
&Apache::loncommon::get_turnedin_filepath($symb,$uname,$udom);
- if ($env{'request.user_in_effect'}) {
- $form_tag_start .= ' onsubmit="preventDefault();"';
- } elsif (($is_task) || ($needs_upload)) {
+ if (($is_task) || ($needs_upload)) {
$form_tag_start .= ' onsubmit="return file_submission_check(this,'."'$path','$multiresp'".');"';
}
$form_tag_start.='>'."\n";
@@ -688,10 +676,10 @@ sub setup_rndseed {
$reqtries = &Apache::lonnet::EXT("resource.$partfortries.randomizeontries");
}
}
- if (($env{'request.state'} eq "construct")
+ if (($env{'request.state'} eq "construct")
|| ($symb eq '')
|| ($Apache::lonhomework::type eq 'practice')
- || ($Apache::lonhomework::history{'resource.CODE'})
+ || ($Apache::lonhomework::history{'resource.CODE'})
|| (($env{'form.code_for_randomlist'}) && ($target eq 'analyze'))) {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
['rndseed']);
@@ -717,7 +705,7 @@ sub setup_rndseed {
}
$env{'form.'.$Apache::inputtags::part.'.rndseed'}=$rndseed;
}
- if ( ($env{'form.resetdata'} eq 'new_problem_variation'
+ if ( ($env{'form.resetdata'} eq &mt('New Problem Variation')
&& $env{'form.submitted'} eq 'yes') ||
$env{'form.newrandomization'} eq &mt('New Randomization')) {
srand(time);
@@ -800,18 +788,13 @@ sub problem_edit_action_button {
sub problem_edit_buttons {
my ($mode)=@_;
- my %editors = &Apache::loncommon::permitted_editors();
# Buttons that save
my $result = '
';
if ($mode eq 'editxml') {
- if ($editors{'xml'}) {
- $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');
- }
+ $result.=&problem_edit_action_button('subsaveedit','saveeditxml','s','Save and EditXML');
$result.=&problem_edit_action_button('subsaveview','saveviewxml','v','Save and View');
} else {
- if ($editors{'edit'}) {
- $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');
- }
+ $result.=&problem_edit_action_button('subsaveedit','saveedit','s','Save and Edit');
$result.=&problem_edit_action_button('subsaveview','saveview','v','Save and View');
}
$result.="\n
\n";
@@ -819,23 +802,13 @@ sub problem_edit_buttons {
$result .= ''.
&problem_edit_action_button('subdiscview','discard','d','Discard Edits and View',1);
if ($mode eq 'editxml') {
- if ($editors{'edit'}) {
- $result.=&problem_edit_action_button('subedit','edit','e','Edit',1);
- }
- if ($editors{'daxe'}) {
- $result.=&problem_edit_action_button('subdaxe','daxe','w','Edit with Daxe',1);
- }
+ $result.=&problem_edit_action_button('subedit','edit','e','Edit',1);
$result.=&problem_edit_action_button('subundo','undoxml','u','Undo',1);
- if (&Apache::loncommon::nocodemirror()) {
+ if ($env{'environment.nocodemirror'}) {
$result.=&Apache::lonhtmlcommon::dragmath_button("LC_editxmltext",1);
}
} else {
- if ($editors{'xml'}) {
- $result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1);
- }
- if ($editors{'daxe'}) {
- $result.=&problem_edit_action_button('subdaxe','daxe','w','Edit with Daxe',1);
- }
+ $result.=&problem_edit_action_button('subeditxml','editxml','x','EditXML',1);
$result.=&problem_edit_action_button('subundo','undo','u','Undo',1);
}
$result.="\n
";
@@ -849,9 +822,9 @@ sub problem_edit_header {
' . &Apache::lonxml::message_location();
$return .= '
@@ -908,7 +881,6 @@ sub option {
sub problem_web_to_edit_header {
my ($rndseed)=@_;
- my %editors = &Apache::loncommon::permitted_editors();
my $result .= '
-
- '.&mt('Reset Submissions').'
+
@@ -1038,21 +1009,10 @@ $show_all
';
$result.=' ';
- if ($editors{'edit'}) {
- $result .= ' ';
- }
- if ($editors{'xml'}) {
- $result .= ' ';
- }
- if (($editors{'daxe'}) &&
- ($env{'browser.type'} ne 'explorer' || $env{'browser.version'} > 9)) {
- my $uri = $env{'request.uri'};
- my $daxeurl = '/daxepage'.$uri;
- $result .= ' ';
- }
+ $result .= ' ';
+ $result .= ' ';
$result.='
@@ -1079,8 +1039,8 @@ sub initialize_storage {
|| $Apache::lonhomework::type eq 'practice') {
my $namespace = $symb || $env{'request.uri'};
- if ($env{'form.resetdata'} eq 'reset_submissions' ||
- ($env{'form.resetdata'} eq 'new_problem_variation'
+ if ($env{'form.resetdata'} eq &mt('Reset Submissions') ||
+ ($env{'form.resetdata'} eq &mt('New Problem Variation')
&& $env{'form.submitted'} eq 'yes') ||
$env{'form.newrandomization'} eq &mt('New Randomization')) {
&Apache::lonnet::tmpreset($namespace,'',$domain,$name);
@@ -1132,9 +1092,9 @@ sub initialize_storage {
for any parts with out-of-order storage (i.e., correct then incorrect,
where awarded >= 1 when correct).
- Will call &store_aggregates() to increment totals for attempts,
+ Will call &store_aggregates() to increment totals for attempts,
students, and corrects, if running user has student role.
-
+
=cut
@@ -1146,8 +1106,6 @@ sub finalize_storage {
delete(@Apache::lonhomework::results{@remove});
my ($symb,$courseid,$domain,$name) =
&Apache::lonnet::whichuser($given_symb);
- my ($passback,$pbscope,$pbmap,$pbsymb,$pbtype,$crsdef,$ltinum,
- $ltiref,$total,$possible,$dopassback);
if ($env{'request.state'} eq 'construct'
|| $symb eq ''
|| $Apache::lonhomework::type eq 'practice') {
@@ -1157,28 +1115,17 @@ sub finalize_storage {
$namespace,'',$domain,$name);
&Apache::lonxml::debug('Construct Store return message:'.$result);
} else {
- my ($laststore,$checkedparts,@parts,%postcorrect,%record);
+ my ($laststore,$checkedparts,@parts,%postcorrect);
if (($env{'user.name'} eq $name) && ($env{'user.domain'} eq $domain) &&
(!$Apache::lonhomework::scantronmode) && (!defined($env{'form.grade_symb'})) &&
(!defined($env{'form.grade_courseid'}))) {
- if (($env{'request.lti.login'}) || ($env{'request.deeplink.login'})) {
- my ($map)=&Apache::lonnet::decode_symb($symb);
- $map = &Apache::lonnet::clutter($map);
- if ($env{'request.lti.login'}) {
- ($passback,$pbscope,$pbmap,$pbsymb,$ltinum,$ltiref) =
- &needs_lti_passback($courseid,$symb,$map);
- } elsif ($env{'request.deeplink.login'}) {
- ($passback,$pbscope,$pbmap,$pbsymb,$crsdef,$ltinum,$ltiref) =
- &needs_linkprot_passback($courseid,$symb,$map);
- }
- }
if ($Apache::lonhomework::history{'version'}) {
$laststore = $Apache::lonhomework::history{'version'}.'='.
$Apache::lonhomework::history{'timestamp'};
} else {
$laststore = '0=0';
}
- %record = &Apache::lonnet::restore($symb,$courseid,$domain,$name);
+ my %record = &Apache::lonnet::restore($symb,$courseid,$domain,$name);
if ($record{'version'}) {
my ($newversion,$oldversion,$oldtimestamp);
if ($Apache::lonhomework::history{'version'}) {
@@ -1254,98 +1201,8 @@ sub finalize_storage {
}
}
}
- if ($passback) {
- foreach my $key (keys(%Apache::lonhomework::results)) {
- if ($key =~ /^resource\.([^\.]+)\.solved$/) {
- my $part = $1;
- if ((($Apache::lonhomework::results{$key} =~ /^correct_/) ||
- ($Apache::lonhomework::results{$key} eq 'incorrect_attempted')) &&
- ($Apache::lonhomework::results{"resource.$part.tries"})) {
- $dopassback = 1;
- last;
- }
- }
- }
- }
- if (($dopassback) && ($pbscope eq 'resource') && ($pbsymb eq $symb)) {
- $total = 0;
- $possible = 0;
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (ref($navmap)) {
- my $res = $navmap->getBySymb($symb);
- if (ref($res)) {
- my $partlist = $res->parts();
- if (ref($partlist) eq 'ARRAY') {
- foreach my $part (@{$partlist}) {
- unless (exists($Apache::lonhomework::results{"resource.$part.solved"})) {
- next if ($Apache::lonhomework::record{"resource.$part.solved"} =~/^excused/);
- my $weight = &Apache::lonnet::EXT("resource.$part.weight",$symb);
- $possible += $weight;
- if (($record{'version'}) && (exists($record{"resource.$part.awarded"}))) {
- my $awarded = $record{"resource.$part.awarded"};
- if ($awarded) {
- $total += $weight * $awarded;
- }
- }
- }
- }
- }
- }
- }
- foreach my $key (keys(%Apache::lonhomework::results)) {
- if ($key =~ /^resource\.([^\.]+)\.awarded$/) {
- my $part = $1;
- my $weight = &Apache::lonnet::EXT("resource.$part.weight",$symb);
- $possible += $weight;
- my $awarded = $Apache::lonhomework::results{$key};
- if ($awarded) {
- $total += $weight * $awarded;
- }
- }
- }
- }
&Apache::lonxml::debug('Store return message:'.$result);
&store_aggregates($symb,$courseid);
- if ($dopassback) {
- my $scoreformat = 'decimal';
- if (($env{'request.lti.login'}) || ($env{'request.deeplink.login'})) {
- if (ref($ltiref) eq 'HASH') {
- if ($ltiref->{'scoreformat'} =~ /^(decimal|ratio|percentage)$/) {
- $scoreformat = $1;
- }
- }
- }
- my ($pbid,$pburl,$pbtype);
- if ($env{'request.lti.login'}) {
- $pbid = $env{'request.lti.passbackid'};
- $pburl = $env{'request.lti.passbackurl'};
- $pbtype = 'lti';
- } elsif ($env{'request.deeplink.login'}) {
- $pbid = $env{'request.linkprotpbid'};
- $pburl = $env{'request.linkprotpburl'};
- $pbtype = 'linkprot';
- }
- my $ltigrade = {
- 'ltinum' => $ltinum,
- 'lti' => $ltiref,
- 'crsdef' => $crsdef,
- 'cid' => $courseid,
- 'uname' => $env{'user.name'},
- 'udom' => $env{'user.domain'},
- 'pbid' => $pbid,
- 'pburl' => $pburl,
- 'pbtype' => $pbtype,
- 'scope' => $pbscope,
- 'pbmap' => $pbmap,
- 'pbsymb' => $pbsymb,
- 'format' => $scoreformat,
- };
- if ($pbscope eq 'resource') {
- $ltigrade->{'total'} = $total;
- $ltigrade->{'possible'} = $possible;
- }
- push(@Apache::lonhomework::ltipassback,$ltigrade);
- }
}
} else {
&Apache::lonxml::debug('Nothing to store');
@@ -1353,104 +1210,6 @@ sub finalize_storage {
return $result;
}
-sub needs_lti_passback {
- my ($courseid,$symb,$map) = @_;
- if (($env{'request.lti.passbackid'}) && ($env{'request.lti.passbackurl'})) {
- if ($courseid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/) {
- my ($cdom,$cnum) = ($1,$2);
- my %lti = &Apache::lonnet::get_domain_lti($cdom,'provider');
- if (ref($lti{$env{'request.lti.login'}}) eq 'HASH') {
- if ($lti{$env{'request.lti.login'}}{'passback'}) {
- my $itemnum = $env{'request.lti.login'};
- my ($ltiscope,$ltiuri,$ltisymb) =
- &LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'},
- $cdom,$cnum,1);
- my ($passback,$ltimap);
- if ($ltiscope eq 'resource') {
- if ($ltisymb eq $symb) {
- $passback = 1;
- }
- } elsif ($ltiscope eq 'map') {
- if ($ltiuri eq $map) {
- $passback = 1;
- $ltimap = $map;
- }
- } elsif ($ltiscope eq 'course') {
- if (($env{'request.lti.uri'} eq "/$cdom/$cnum") || ($env{'request.lti.uri'} eq '')) {
- $passback = 1;
- }
- }
- return ($passback,$ltiscope,$ltimap,$ltisymb,$itemnum,$lti{$itemnum});
- }
- }
- }
- }
- return;
-}
-
-sub needs_linkprot_passback {
- my ($courseid,$symb,$map) = @_;
- if (($env{'request.linkprotpbid'}) && ($env{'request.linkprotpburl'})) {
- if ($courseid =~ /^($LONCAPA::match_domain)_($LONCAPA::match_courseid)$/) {
- my ($cdom,$cnum) = ($1,$2);
- my ($deeplink_symb,$deeplink_map,$deeplink,$passback);
- $deeplink_symb = &Apache::loncommon::deeplink_login_symb($cnum,$cdom);
- if ($deeplink_symb) {
- if ($deeplink_symb =~ /\.(page|sequence)$/) {
- $deeplink_map = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($deeplink_symb))[2]);
- my $navmap = Apache::lonnavmaps::navmap->new();
- if (ref($navmap)) {
- $deeplink = $navmap->get_mapparam(undef,$deeplink_map,'0.deeplink');
- }
- } else {
- $deeplink = &Apache::lonnet::EXT('resource.0.deeplink',$deeplink_symb);
- $deeplink_map = &Apache::lonnet::deversion((&Apache::lonnet::decode_symb($deeplink_symb))[0]);
- }
- if (($deeplink ne '') && ($env{'request.linkprot'} ne '')) {
- my ($itemid,$tinyurl) = split(/:/,$env{'request.linkprot'});
- if ($itemid =~ /^(\d+)(c|d)$/) {
- my ($itemnum,$itemtype) = ($1,$2);
- my ($crsdef,$lti_in_use);
- if ($itemtype eq 'c') {
- $crsdef = 1;
- my %crslti = &Apache::lonnet::get_course_lti($cnum,$cdom,'provider');
- $lti_in_use = $crslti{$itemnum};
- } else {
- my %domlti = &Apache::lonnet::get_domain_lti($cdom,'linkprot');
- $lti_in_use = $domlti{$itemnum};
- }
- my ($state,$others,$listed,$scope,$protect,$display,$target,$exit) = split(/,/,$deeplink);
- my ($passback,$pbscope);
- if ($scope eq 'res') {
- if ($deeplink_symb eq $symb) {
- $passback = 1;
- $pbscope = 'resource';
- }
- } elsif ($scope eq 'map') {
- if (&Apache::lonnet::clutter($deeplink_map) eq $map) {
- $passback = 1;
- $pbscope = 'nonrec';
- }
- } elsif ($scope eq 'rec') {
- if (&Apache::lonnet::clutter($deeplink_map) eq $map) {
- $passback = 1;
- $pbscope = 'map';
- } else {
- my @recurseup = &Apache::lonnet::get_map_hierarchy($map,$env{'request.course.id'});
- if (grep(/^\Q$deeplink_map\E$/,@recurseup)) {
- $passback = 1;
- $pbscope = 'map';
- }
- }
- }
- return ($passback,$pbscope,$deeplink_map,$deeplink_symb,$crsdef,$itemnum,$lti_in_use);
- }
- }
- }
- }
- }
-}
-
=pod
=item check_correctness_changes()
@@ -1585,99 +1344,6 @@ sub store_aggregates {
}
}
-sub access_status_msg {
- my ($mode,$status,$symb,$target,$ipused,$accessmsg) = @_;
- my $msg;
- if ($target eq 'web') {
- if ($status eq 'UNAVAILABLE') {
- $msg.='
'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'
';
- } elsif ($status eq 'NOT_IN_A_SLOT') {
- $msg.='
'.&mt('You are not currently signed up to work at this time and/or place.').'
';
- } elsif (($status eq 'RESERVABLE') || ($status eq 'RESERVABLE_LATER') ||
- ($status eq 'NOTRESERVABLE')) {
- $msg.='
'.&mt('Access requires reservation to work at specific time/place.').'
';
- } elsif ($status ne 'NOT_YET_VIEWED') {
- $msg.='
'.&mt('Not open to be viewed').'
';
- }
- if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
- $msg.=&mt('The problem ').$accessmsg;
- } elsif ($status eq 'UNCHECKEDOUT') {
- $msg.=&checkout_msg();
- } elsif ($status eq 'NOT_YET_VIEWED') {
- $msg.=&firstaccess_msg($accessmsg,$symb);
- } elsif ($status eq 'NOT_IN_A_SLOT') {
- $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
- } elsif ($status eq 'RESERVABLE') {
- $msg.=&mt('Available to make a reservation.').' '.&mt('Reservation window closes [_1].',
- &Apache::lonnavmaps::timeToHumanString($accessmsg,'end')).
- '
'.
- &Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
- } elsif ($status eq 'RESERVABLE_LATER') {
- $msg.=&mt('Window to make a reservation will open [_1].',
- &Apache::lonnavmaps::timeToHumanString($accessmsg,'start'));
- } elsif ($status eq 'NOTRESERVABLE') {
- $msg.=&mt('Not available to make a reservation.');
- }
- $msg.='
';
- } elsif ($target eq 'tex') {
- my $startminipage = ($env{'form.problem_split'}=~/yes/i)? ''
- : '\begin{minipage}{\textwidth}';
-
- $msg ='\noindent \vskip 1 mm '.
- $startminipage.'\vskip 0 mm';
- if ($status eq 'UNAVAILABLE') {
- $msg.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.');
- } elsif ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
- $msg.=&mt('Problem is not open to be viewed. It')." $accessmsg";
- } else {
- $msg.=&mt('Problem is not open to be viewed.');
- }
- $msg .= " \\vskip 0 mm ";
- }
- return $msg;
-}
-
-sub checkin_prompt {
- my ($target,$slot_name,$slot,$type) = @_;
- my $result;
- if ($target eq 'web') {
- $result = &Apache::bridgetask::proctor_validation_screen($slot);
- } elsif ($target eq 'grade') {
- if (!&Apache::bridgetask::proctor_check_auth($slot_name,$slot,$type)) {
- $result = &mt('An error occurred during check-in');
- }
- }
- return $result;
-}
-
-sub selfcheckin_resource {
- my ($resource_due,$slot_name,$slot,$symb) = @_;
- if ($slot_name ne '') {
- my $checked_in =
- $Apache::lonhomework::history{'resource.0.checkedin'};
- if ($checked_in eq '') {
- # unproctored slot access, self checkin
- my $check = &Apache::bridgetask::check_in('problem',undef,undef,
- $slot_name);
- if ($check =~ /^error: /) {
- &Apache::lonnet::logthis("Error during self-checkin of problem (symb: $symb) using slot: $slot_name");
- } else {
- $checked_in = $Apache::lonhomework::results{"resource.0.checkedin"};
- }
- }
- if ((ref($slot) eq 'HASH') && ($checked_in ne '')) {
- if ($slot->{'starttime'} < time()) {
- if (!$resource_due) {
- $resource_due = $slot->{'endtime'};
- } elsif ($slot->{'endtime'} < $resource_due) {
- $resource_due = $slot->{'endtime'};
- }
- }
- }
- }
- return $resource_due;
-}
-
sub checkout_msg {
my %lt=&Apache::lonlocal::texthash(
'resource'=>'The resource needs to be checked out',
@@ -1893,12 +1559,15 @@ sub start_problem {
$target eq 'tex') {
if ($env{'form.markaccess'}) {
my @interval=&Apache::lonnet::EXT("resource.0.interval");
- my ($timelimit) = ($interval[0] =~ /^(\d+)/);
- my $is_set = &Apache::lonnet::set_first_access($interval[1],$timelimit);
+ my $is_set = &Apache::lonnet::set_first_access($interval[1],$interval[0]);
unless (($is_set eq 'ok') || ($is_set eq 'already_set')) {
$firstaccres = $is_set;
}
}
+
+ ($status,$accessmsg,$slot_name,$slot) =
+ &Apache::lonhomework::check_slot_access('0','problem');
+ push (@Apache::inputtags::status,$status);
}
if ($target eq 'web' || $target eq 'webgrade' || $target eq 'tex'
@@ -1906,8 +1575,7 @@ sub start_problem {
($result,$form_tag_start,$probpartlist) =
&page_start($target,$token,$tagstack,$parstack,$parser,$safeeval,
$name);
- } elsif ((($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) ||
- ($target eq 'answer')) {
+ } elsif (($target eq 'grade') && ($Apache::lonhomework::type eq 'randomizetry')) {
my ($symb)= &Apache::lonnet::whichuser();
if ($symb ne '') {
my $navmap = Apache::lonnavmaps::navmap->new();
@@ -1920,20 +1588,6 @@ sub start_problem {
}
}
- if (($target eq 'web') && ($env{'request.user_in_effect'})) {
- &Apache::lonxml::get_all_text("/problem",$parser,$style);
- return $result;
- }
-
- if ($target eq 'web' || $target eq 'grade' || $target eq 'answer' ||
- $target eq 'tex') {
-
- my ($symb)= &Apache::lonnet::whichuser();
- ($status,$accessmsg,$slot_name,$slot) =
- &Apache::lonhomework::check_slot_access('0','problem',$symb,$probpartlist);
- push (@Apache::inputtags::status,$status);
- }
-
if ($target eq 'tex' and $env{'request.symb'} =~ m/\.page_/) {$result='';}
if ($target eq 'analyze') { my $rndseed=&setup_rndseed($safeeval,$target); }
@@ -1971,8 +1625,8 @@ sub start_problem {
}
$form_tag_start.='
'.
- '
'.&mt('New Problem Variation').' ';
+ '
';
if (exists($env{'form.username'})) {
$form_tag_start.=
'
';
- }
- $result .= &access_status_msg('problem',$status,$symb,$target,'',$accessmsg);
+ if ( $target eq "web" ) {
+ my $msg;
+ if ($status eq 'UNAVAILABLE') {
+ $msg.='
'.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'
';
+ } elsif ($status eq 'NOT_IN_A_SLOT') {
+ $msg.='
'.&mt('You are not currently signed up to work at this time and/or place.').'
';
+ } elsif (($status eq 'RESERVABLE') || ($status eq 'RESERVABLE_LATER') ||
+ ($status eq 'NOTRESERVABLE')) {
+ $msg.='
'.&mt('Access requires reservation to work at specific time/place.').'
';
+ } elsif ($status ne 'NOT_YET_VIEWED') {
+ $msg.='
'.&mt('Not open to be viewed').'
';
+ }
+ if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
+ $msg.=&mt('The problem ').$accessmsg;
+ } elsif ($status eq 'UNCHECKEDOUT') {
+ $msg.=&checkout_msg();
+ } elsif ($status eq 'NOT_YET_VIEWED') {
+ if ($firstaccres) {
+ $msg .= '
'.
+ &mt('A problem occurred when trying to start the timer.').'
';
+ }
+ $msg.=&firstaccess_msg($accessmsg,$symb);
+ } elsif ($status eq 'NOT_IN_A_SLOT') {
+ $msg.=&Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
+ } elsif ($status eq 'RESERVABLE') {
+ $msg.=&mt('Available to make a reservation.').' '.&mt('Reservation window closes [_1].',
+ &Apache::lonnavmaps::timeToHumanString($accessmsg,'end')).
+ '
'.
+ &Apache::bridgetask::add_request_another_attempt_button("Sign up for time to work");
+ } elsif ($status eq 'RESERVABLE_LATER') {
+ $msg.=&mt('Window to make a reservation will open [_1].',
+ &Apache::lonnavmaps::timeToHumanString($accessmsg,'start'));
+ } elsif ($status eq 'NOTRESERVABLE') {
+ $msg.=&mt('Not available to make a reservation.');
+ }
+ $result.=$msg.'
';
+ } elsif ($target eq 'tex') {
+ my $startminipage = ($env{'form.problem_split'}=~/yes/i)? ''
+ : '\begin{minipage}{\textwidth}';
+ $result.='\noindent \vskip 1 mm '.
+ $startminipage.'\vskip 0 mm';
+ if ($status eq 'UNAVAILABLE') {
+ $result.=&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'\vskip 0 mm ';
+ } else {
+ $result.=&mt('Problem is not open to be viewed. It')." $accessmsg \\vskip 0 mm ";
+ }
+ }
} elsif ($status eq 'NEEDS_CHECKIN') {
my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser,
$style);
- $result .= &checkin_prompt($target,$slot_name,$slot,'problem');
+ if ($target eq 'web') {
+ $result .=
+ &Apache::bridgetask::proctor_validation_screen($slot);
+ } elsif ($target eq 'grade') {
+ &Apache::bridgetask::proctor_check_auth($slot_name,$slot,
+ 'problem');
+ }
} elsif ($target eq 'web') {
if ($status eq 'CAN_ANSWER') {
$resource_due = &Apache::lonhomework::due_date(0, $env{'request.symb'});
if ($slot_name ne '') {
- $resource_due = &selfcheckin_resource($resource_due,$slot_name,$slot,
- $env{'request.symb'});
+ my $checked_in =
+ $Apache::lonhomework::history{'resource.0.checkedin'};
+ if ($checked_in eq '') {
+ # unproctored slot access, self checkin
+ &Apache::bridgetask::check_in('problem',undef,undef,
+ $slot_name);
+ $checked_in =
+ $Apache::lonhomework::results{"resource.0.checkedin"};
+ }
+ if ((ref($slot) eq 'HASH') && ($checked_in ne '')) {
+ if ($slot->{'starttime'} < time()) {
+ if (!$resource_due) {
+ $resource_due = $slot->{'endtime'};
+ } elsif ($slot->{'endtime'} < $resource_due) {
+ $resource_due = $slot->{'endtime'};
+ }
+ }
+ }
}
if ($resource_due) {
my $time_left = $resource_due - time();
@@ -2051,15 +1769,10 @@ sub start_problem {
'
';
# create a page header and exit
if ($env{'request.state'} eq "construct") {
- if ($env{'form.inhibitmenu'} eq 'yes') {
- # error messages can be useful in any case
- $result.= &Apache::lonxml::message_location();
- } else {
- $result.= &problem_web_to_edit_header($env{'form.rndseed'});
- }
+ $result.= &problem_web_to_edit_header($env{'form.rndseed'});
if ($Apache::lonhomework::type eq 'practice') {
- $result.= '
'.&mt('New Problem Variation').' '.
+ $result.= '
'.
&practice_problem_header().'
';
} elsif ($Apache::lonhomework::type eq 'randomizetry') {
my $reqtries = &Apache::lonnet::EXT("resource.$Apache::inputtags::part.randomizeontries");
@@ -2086,6 +1799,8 @@ sub start_problem {
} elsif ($target eq 'tex') {
$result .= 'INSERTTEXFRONTMATTERHERE';
$result .= &select_metadata_hyphenation();
+
+
}
} elsif ($target eq 'edit') {
$result .= $form_tag_start.&problem_edit_header();
@@ -2205,12 +1920,6 @@ sub end_problem {
}
}
$result =~ s/INSERTTEXFRONTMATTERHERE/$frontmatter/;
- } elsif ($target eq 'web') {
- if ($env{'request.user_in_effect'}) {
- &reset_problem_globals('problem');
- $result .= &Apache::lonhtmlcommon::set_compute_end_time();
- return $result;
- }
}
my $status=$Apache::inputtags::status['-1'];
@@ -2365,8 +2074,8 @@ sub start_library {
'
';
$result.=&problem_web_to_edit_header($rndseed);
if ($Apache::lonhomework::type eq 'practice') {
- $result.= '
'.&mt('New Problem Variation').' '.
+ $result.= '
'.
&practice_problem_header().'
';
}
}
@@ -3149,11 +2858,7 @@ sub end_part {
$gradestatus='';
}
$result.=$gradestatus;
- if ($$tagstack[-2] eq 'td' and $target eq 'tex') {
- if (not $env{'form.problem_split'}=~/yes/) {
- $result.='\end{minipage}';
- }
- }
+ if ($$tagstack[-2] eq 'td' and $target eq 'tex') {$result.='\end{minipage}';}
} elsif ($target eq 'edit') {
$result.=&Apache::edit::end_table();
} elsif ($target eq 'modified') {
@@ -3318,7 +3023,7 @@ sub end_startouttext {
.&Apache::edit::deletelist($target,$token)
.''
.'
';
- if (&Apache::loncommon::nocodemirror()) {
+ if ($env{'environment.nocodemirror'}) {
$result.=&Apache::lonhtmlcommon::dragmath_button($areaid,1);
} else {
$result.=' ';