- ';
+
+
+
+
+ '.
+ &Apache::loncommon::help_open_menu('','Problem Editing Help','Problem_Editor_XML_Index','',5,'Authoring',undef,undef,undef,'Problem Editing Help')
+ .' | '.
+ '';
}
sub problem_edit_footer {
return ' |
- ';
+ '.
+ &Apache::lonhtmlcommon::htmlareaselectactive(@Apache::lonxml::htmlareafields).
+ "\n\n".&Apache::loncommon::endbodytag()."\n";
+}
+
+sub option {
+ my ($value,$name) = @_;
+ my $result ="
+ ".&option('CAN_ANSWER' ,'problemstate').&mt("Answerable")."
+ ".&option('CANNOT_ANSWER_tries' ,'problemstate').&mt("Open with full tries")."
+ ".&option('CANNOT_ANSWER_correct','problemstate').&mt("Open and correct")."
+ ".&option('SHOW_ANSWER' ,'problemstate').&mt("Show Answer")."
+
+
+
+Problem Type:
+
+
+
+Feedback Mode:
+
+
+
+ ";
my $numtoanalyze=$ENV{'form.numtoanalyze'};
if (!$numtoanalyze) { $numtoanalyze=20; }
$result.= '
+
+ENDCHECKOUT
+}
+
sub init_problem_globals {
my ($type)=@_;
#initialize globals
if ($type eq 'problem') {
$Apache::inputtags::part='0';
@Apache::inputtags::partlist=('0');
- $Apache::lonhomework::problemstatus=
- &Apache::lonnet::EXT('resource.0.problemstatus');
- } else {
+ $Apache::lonhomework::problemstatus=&get_problem_status('0');
+ $Apache::lonhomework::ignore_response_errors=0;
+ } elsif ($type eq 'library') {
$Apache::inputtags::part='';
@Apache::inputtags::partlist=();
$Apache::lonhomework::problemstatus='';
+ $Apache::lonhomework::ignore_response_errors=1;
}
@Apache::inputtags::responselist = ();
@Apache::inputtags::importlist = ();
@@ -318,6 +408,28 @@ sub reset_problem_globals {
undef($Apache::lonhomework::name);
}
+sub set_problem_state {
+ my ($part)=@_;
+ if ($ENV{'form.problemstate'} eq 'CANNOT_ANSWER_correct') {
+ $Apache::lonhomework::history{"resource.$part.solved"}=
+ 'correct_by_student';
+ }
+}
+
+sub get_problem_status {
+ my ($part)=@_;
+ my $problem_status;
+ if ($ENV{'request.state'} eq 'construct' &&
+ defined($ENV{'form.problemstatus'})) {
+ $problem_status=$ENV{'form.problemstatus'};
+ } else {
+ $problem_status=&Apache::lonnet::EXT("resource.$part.problemstatus");
+ &Apache::lonxml::debug("problem status for $part is $problem_status");
+ &Apache::lonxml::debug("env probstat is ".$ENV{'form.problemstatus'});
+ }
+ return $problem_status;
+}
+
sub start_problem {
my ($target,$token,$tagstack,$parstack,$parser,$safeeval)=@_;
@@ -335,13 +447,18 @@ sub start_problem {
$Apache::lonhomework::scantronmode=1;
}
+ &initialize_storage();
if ($target ne 'analyze') {
- &initialize_storage();
if ($target eq 'web') {
&Apache::lonhomework::showhash(%Apache::lonhomework::history);
}
+ if ($ENV{'request.state'} eq 'construct') { &set_problem_state('0'); }
$Apache::lonhomework::type=&Apache::lonnet::EXT('resource.0.type');
- &Apache::lonxml::debug("Found this to be of type :$Apache::lonhomework::type:");
+ if (($ENV{'request.state'} eq 'construct') &&
+ defined($ENV{'form.problemtype'})) {
+ $Apache::lonhomework::type=$ENV{'form.problemtype'};
+ }
+ &Apache::lonxml::debug("Found this to be of type :$Apache::ltonhomework::type:");
}
if ($Apache::lonhomework::type eq '' ) {
my $uri=$ENV{'request.uri'};
@@ -355,7 +472,8 @@ sub start_problem {
}
#added vars to the scripting enviroment
- my $expression='$external::part='.$Apache::inputtags::part.';';
+ my $expression='$external::part=\''.$Apache::inputtags::part.'\';';
+ $expression.='$external::type=\''.$Apache::lonhomework::type.'\';';
&Apache::run::run($expression,$safeeval);
my $status;
my $accessmsg;
@@ -379,7 +497,9 @@ sub start_problem {
}
$body_tag_start.=&Apache::lonxml::printtokenheader($target,$token);
}
-
+ if ($ENV{'form.markaccess'}) {
+ &Apache::lonnet::set_first_access('map');
+ }
#handle rand seed in construction space
my $rndseed=&setup_rndseed($safeeval);
my ($symb)=&Apache::lonxml::whichuser();
@@ -389,7 +509,16 @@ sub start_problem {
''.
' ';
+ value="'.$ENV{'form.username'}.'" />';
+ if ($ENV{'user.adv'}) {
+ $form_tag_start.=
+ ' '.&mt(' Show All Foils');
+ }
+ $form_tag_start.=' ';
}
($status,$accessmsg) = &Apache::lonhomework::check_access('0');
push (@Apache::inputtags::status,$status);
@@ -399,21 +528,25 @@ sub start_problem {
&Apache::lonxml::debug("Got $status");
if (( $status eq 'CLOSED' ) ||
( $status eq 'UNCHECKEDOUT') ||
+ ( $status eq 'NOT_YET_VIEWED') ||
( $status eq 'BANNED') ||
- ( $status eq 'UNAVAILABLE')) {
+ ( $status eq 'UNAVAILABLE') ||
+ ( $status eq 'INVALID_ACCESS')) {
my $bodytext=&Apache::lonxml::get_all_text("/problem",$parser);
if ( $target eq "web" ) {
$result.= $head_tag_start.'';
my $msg=$body_tag_start;
if ($status eq 'UNAVAILABLE') {
- $result.=''.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'';
- } else {
- $result.=''.&mt('Not open to be viewed').'';
+ $msg.=''.&mt('Unable to determine if this resource is open due to network problems. Please try again later.').'';
+ } elsif ($status ne 'NOT_YET_VIEWED') {
+ $msg.=''.&mt('Not open to be viewed').'';
}
- if ($status eq 'CLOSED') {
+ if ($status eq 'CLOSED' || $status eq 'INVALID_ACCESS') {
$msg.='The problem '.$accessmsg;
} elsif ($status eq 'UNCHECKEDOUT') {
$msg.=&checkout_msg;
+ } elsif ($status eq 'NOT_YET_VIEWED') {
+ $msg.=&firstaccess_msg($accessmsg,$symb);
}
$result.=$msg.' ';
} elsif ($target eq 'tex') {
@@ -426,25 +559,19 @@ sub start_problem {
}
} elsif ($target eq 'web') {
my $name= &get_resource_name($parstack,$safeeval);
- if ($status eq 'CAN_ANSWER') {
- # create a page header and exit
- $result.="$head_tag_start$name
+ $result.="$head_tag_start$name
$body_tag_start \n $form_tag_start".
- '';
- if ($ENV{'request.state'} eq "construct") {
- $result.= &problem_web_to_edit_header($ENV{'form.rndseed'});
- }
- # if we are viewing someone else preserve that info
- if (defined $ENV{'form.grade_symb'}) {
- foreach my $field ('symb','courseid','domain','username') {
- $result .= ''."\n";
- }
+ '';
+ # create a page header and exit
+ if ($ENV{'request.state'} eq "construct") {
+ $result.= &problem_web_to_edit_header($ENV{'form.rndseed'});
+ }
+ # if we are viewing someone else preserve that info
+ if (defined $ENV{'form.grade_symb'}) {
+ foreach my $field ('symb','courseid','domain','username') {
+ $result .= ''."\n";
}
- } elsif ($status eq 'SHOW_ANSWER' || $status eq 'CANNOT_ANSWER'
- || $status eq 'CLOSED' || $status eq 'UNAVALAILABLE') {
- $result.=$head_tag_start.
- "$name\n$body_tag_start\n";
}
} elsif ($target eq 'tex') {
my $startminipage = '';
@@ -453,14 +580,16 @@ sub start_problem {
}
my $id = $Apache::inputtags::part;
my $weight = &Apache::lonnet::EXT("resource.$id.weight");
- my $allkeys=&Apache::lonnet::metadata($ENV{'request.uri'},'keys');
- my @allkeys = split /,/,$allkeys;
+ my $packages=&Apache::lonnet::metadata($ENV{'request.uri'},'packages');
+ my @packages = split /,/,$packages;
my $allow_print_points = 0;
- foreach my $partial_key (@allkeys) {
- if ($partial_key=~m/weight/) {
- $allow_print_points++;
+ foreach my $partial_key (@packages) {
+ if ($partial_key=~m/^part_0$/) {
+ $allow_print_points=1;
}
}
+ my $maxtries = &Apache::lonnet::EXT("resource.$id.maxtries");
+ if (defined($maxtries) && $maxtries < 0) { $allow_print_points=0; }
my $duedate = &Apache::lonnet::EXT("resource.$id.duedate");
$duedate = POSIX::strftime("%c",localtime($duedate));
my $temp_file;
@@ -473,7 +602,7 @@ sub start_problem {
my @due_file_content = <$temp_file>;
my $due_file_content = $due_file_content[$#due_file_content];
chomp $due_file_content;
- my $name_of_resourse= &get_resource_name($parstack,$safeeval);
+ my $name_of_resourse= &Apache::lonxml::latex_special_symbols(&get_resource_name($parstack,$safeeval),'header');
if ($due_file_content ne $duedate) {
$temp_file = Apache::File->new('>'.$filename);
print $temp_file "$duedate\n";
@@ -499,6 +628,8 @@ sub start_problem {
} elsif ($target eq 'edit') {
$result.=$head_tag_start."".$body_tag_start.$form_tag_start.
&problem_edit_header();
+ $Apache::lonxml::warnings_error_header=
+ &mt("Editor Errors - these errors might not effect the running of the problem, but they will likely cause problems with further use of the Edit mode. Please use the EditXML mode to fix these errors.")." ";
my $temp=&Apache::edit::insertlist($target,$token);
$result.=$temp;
} elsif ($target eq 'modified') {
@@ -517,13 +648,17 @@ sub end_problem {
my $status=$Apache::inputtags::status['-1'];
if ($target eq 'grade' || $target eq 'web' || $target eq 'answer' ||
$target eq 'tex') {
- if ( $target eq 'grade' && $Apache::inputtags::part eq '0' &&
- $status eq 'CAN_ANSWER' ) {
+ if ( $target eq 'grade' && $Apache::inputtags::part eq '0') {
# if part is zero, no s existed, so we need to the grading
- &Apache::inputtags::grade;
+ if ($status eq 'CAN_ANSWER' ||$Apache::lonhomework::scantronmode) {
+ &Apache::inputtags::grade;
+ } else {
+ # move any submission data to .hidden
+ &Apache::inputtags::hidealldata($Apache::inputtags::part);
+ }
} elsif ( ($target eq 'web' || $target eq 'tex') &&
$Apache::inputtags::part eq '0' &&
- $status ne 'UNCHECKEDOUT') {
+ $status ne 'UNCHECKEDOUT' && $status ne 'NOT_YET_VIEWED') {
# if part is zero, no s existed, so we need show the current
# grading status
my $gradestatus = &Apache::inputtags::gradestatus($Apache::inputtags::part,$target);
@@ -533,30 +668,28 @@ sub end_problem {
(($target eq 'web') && ($ENV{'request.state'} ne 'construct')) ||
($target eq 'answer') || ($target eq 'tex')
) {
- if ($status eq 'CAN_ANSWER') {
- if ($target ne 'tex' &&
- $ENV{'form.answer_output_mode'} ne 'tex') {
- $result.=" |