[LON-CAPA-cvs] cvs: loncom /homework lonsimpleproblemedit.pm simpleproblem.problem simpleproblem.problem.meta
www
lon-capa-cvs@mail.lon-capa.org
Wed, 09 Jul 2003 06:23:21 -0000
This is a MIME encoded message
--www1057731801
Content-Type: text/plain
www Wed Jul 9 02:23:21 2003 EDT
Modified files:
/loncom/homework lonsimpleproblemedit.pm simpleproblem.problem
simpleproblem.problem.meta
Log:
Simpleproblem now works for Radio and Option response
--www1057731801
Content-Type: text/plain
Content-Disposition: attachment; filename="www-20030709022321.txt"
Index: loncom/homework/lonsimpleproblemedit.pm
diff -u loncom/homework/lonsimpleproblemedit.pm:1.1 loncom/homework/lonsimpleproblemedit.pm:1.2
--- loncom/homework/lonsimpleproblemedit.pm:1.1 Mon Jul 7 03:32:16 2003
+++ loncom/homework/lonsimpleproblemedit.pm Wed Jul 9 02:23:20 2003
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Simple Problem Parameter Setting "Editor"
#
-# $Id: lonsimpleproblemedit.pm,v 1.1 2003/07/07 07:32:16 www Exp $
+# $Id: lonsimpleproblemedit.pm,v 1.2 2003/07/09 06:23:20 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -33,8 +33,42 @@
use Apache::loncommon;
use Apache::lonnet;
+my %qparms;
+my $prefix;
+my $qtype;
+
+sub evaloptionhash {
+ my $options=shift;
+ $options=~s/^\(\'//;
+ $options=~s/\'\)$//;
+ my %returnhash=();
+ foreach (split(/\'\,\'/,$options)) {
+ $returnhash{$_}=$_;
+ }
+ return %returnhash;
+}
+
+sub rawrendering {
+ my ($request,$uri)=@_;
+ my $problem=&Apache::lonnet::getfile
+ (&Apache::lonnet::filelocation('',$uri));
+ &Apache::lonnet::devalidatecourseresdata(
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'});
+ my $uname=$ENV{'user.name'};
+ my $udom=$ENV{'user.domain'};
+ $ENV{'user.name'}=time;
+ $ENV{'user.domain'}=time;
+ my $result = &Apache::lonxml::xmlparse($request,'web', $problem);
+ $ENV{'user.name'}=$uname;
+ $ENV{'user.domain'}=$udom;
+ $result=~s/^.*\<body[^\>]*\>//si;
+ $result=~s/\<\/body[^\>]*\>.*$//si;
+ return $result;
+}
+
sub questiontext {
- my $text=shift;
+ my $text=$qparms{$prefix.'questiontext'};
return (<<ENDQUESTION);
<table bgcolor="#dddd22" cellspacing="4" cellpadding="2">
<tr><td><b>Question Text</b><br />
@@ -46,7 +80,7 @@
}
sub hint {
- my $text=shift;
+ my $text=$qparms{$prefix.'hinttext'};
return (<<ENDHINT);
<table bgcolor="#accacc" cellspacing="4" cellpadding="2">
<tr><td><b>Hint Text</b><br />
@@ -58,10 +92,18 @@
}
sub foil {
- my ($number,$value,$position,$text,%values)=@_;
+ my $number=shift;
+ my %values='';
+ if ($qtype eq 'radio') {
+ %values=('true' => 'True', 'false' => 'False');
+ } elsif ($qtype eq 'option') {
+ %values=&evaloptionhash($qparms{$prefix.'options'});
+ }
$values{'unused'}='Not shown, not used';
+ my $value=$qparms{$prefix.'value'.$number};
unless (defined($value)) { $value='unused'; }
unless ($values{$value}) { $value='unused'; }
+ my $position=$qparms{$prefix.'position'.$number};
my %positions=('random' => 'Random position',
'top' => 'Show always at top position',
'bottom' => 'Show always at bottom position');
@@ -73,6 +115,7 @@
($value,'value'.$number,%values);
my $selectposition=&Apache::loncommon::select_form
($position,'position'.$number,%positions);
+ my $text=$qparms{$prefix.'text'.$number};
return (<<ENDFOIL);
<table bgcolor="#dd55ff" cellspacing="4" cellpadding="2">
<tr><td colspan="2"><b>Foil</b></td></tr>
@@ -106,19 +149,30 @@
$uri=~s/\/smpedit$//;
my $symb=&Apache::lonnet::symbread($uri);
+# ------------------------------------------------ Prefix for everything stored
+ $prefix=$ENV{'request.course.id'}.'.'.$symb.'.0.';
# ---------------------------------------------------------- Anything to store?
- if (($symb) && ($ENV{'form.storeproblem'})) {
+ if (($symb) && (defined($ENV{'form.questiontype'}))) {
my %storecontent=();
undef %storecontent;
+ if ($ENV{'form.questiontype'} eq 'option') {
+ my %curoptions=&evaloptionhash($ENV{'form.options'});
+ if ($ENV{'form.delopt'}) {
+ delete $curoptions{$ENV{'form.delopt'}};
+ }
+ if ($ENV{'form.newopt'}) {
+ $ENV{'form.newopt'}=~s/\'/\\\'/g;
+ $curoptions{$ENV{'form.newopt'}}=$ENV{'form.newopt'};
+ }
+ $ENV{'form.options'}="('".join("','",keys %curoptions)."')";
+ }
foreach (keys %ENV) {
if ($_=~/^form\.(\w+)$/) {
- my $spnam=$1;
- my $symbparm=$symb.'.'.$spnam;
-
- my $courselevelr=$ENV{'request.course.id'}.'.'.$symbparm;
-
- $storecontent{$courselevelr}=$ENV{'form.'.$spnam};;
+ my $parm=$1;
+ $storecontent{$prefix.$parm}=$ENV{'form.'.$parm};
+ $storecontent{$prefix.$parm}=~s/^\s+//s;
+ $storecontent{$prefix.$parm}=~s/\s+$//s;
}
}
my $reply=&Apache::lonnet::cput
@@ -127,6 +181,13 @@
$ENV{'course.'.$ENV{'request.course.id'}.'.num'});
}
+# ------------------------------------------------------------------- Read Data
+
+ %qparms=&Apache::lonnet::dump('resourcedata',
+ $ENV{'course.'.$ENV{'request.course.id'}.'.domain'},
+ $ENV{'course.'.$ENV{'request.course.id'}.'.num'},
+ $ENV{'request.course.id'}.'.'.$symb);
+
# ------------------------------------------------------------ Print the screen
$r->print(<<ENDDOCUMENT);
<html>
@@ -136,15 +197,70 @@
$r->print(&Apache::loncommon::bodytag('Simple Problem Editor'));
if ($symb) {
$r->print('<h1>'.&Apache::lonnet::gettitle($symb).'</h1>');
-#
-#
- $r->print(&questiontext('What color?').
- &foil(3,'green','bottom','Tomato',
- ('green'=>'green','red'=>'red')).
- &hint('This is the hint.'));
-#
-#
+ $r->print('<table border="2" bgcolor="#FFFFFF" width="100%"><tr><td>'.
+ &rawrendering($r,$uri).
+ '</td></tr></table><br />');
+ $r->print('<form method="post">');
+# Question Type
+ my %questiontypes=('radio' =>
+ '1 out of N multiple choice (radio button)',
+ 'option' => 'Option Response');
+ $qtype=$qparms{$prefix.'questiontype'};
+ unless (defined($qtype)) { $qtype='radio'; }
+ unless ($questiontypes{$qtype}) { $qtype='radio'; }
+ $r->print('Question Type: '.&Apache::loncommon::select_form
+ ($qtype,'questiontype',%questiontypes).
+ '<p> </p>');
+# Question Text
+ $r->print(&questiontext());
+# Radio, Option ===
+ if (($qtype eq 'radio') || ($qtype eq 'option')) {
+# Response
+ my $maxfoils=$qparms{$prefix.'maxfoils'};
+ unless (defined($maxfoils)) { $maxfoils=10; }
+ unless ($maxfoils=~/^\d+$/) { $maxfoils=10; }
+ if ($maxfoils<=0) { $maxfoils=10; }
+ my %randomizes=('yes' => 'Display foils in random order',
+ 'no' => 'Display foils in order given');
+ my $randomize=$qparms{$prefix.'randomize'};
+ unless (defined($randomize)) { $randomize='yes'; }
+ unless ($randomizes{$randomize}) { $randomize='yes'; }
+ $r->print(
+ '<table bgcolor="#00ee44" cellspacing="4" cellpadding="2">'.
+ '<tr><td>Max number of foils displayed: <input type="text" size="3" name="maxfoils" value="'.$maxfoils.'" /> '.
+ &Apache::loncommon::select_form
+ ($randomize,'randomize',%randomizes).
+ '</td></tr><tr><td bgcolor="#AAAAAA">');
+# Option Response: Options
+ if ($qtype eq 'option') {
+ my $options=$qparms{$prefix.'options'};
+ unless (defined($options)) { $options="('true','false')"; }
+ my %optionshash=&evaloptionhash($options);
+ $r->print(
+ '<table bgcolor="#ffcc22" cellspacing="4" cellpadding="2">'.
+ '<tr><td><input type="hidden" name="options" value="'.
+ $options.'" />Add new option: '.
+ '<input type="text" name="newopt" size="15" />Delete an option: '.
+ &Apache::loncommon::select_form('','delopt',('' => '',%optionshash)).
+ '</td></tr><tr><td>');
+ }
+# Foils
+ for (my $i=1;$i<=10;$i++) {
+ $r->print(&foil($i));
+ }
+# End Options
+ if ($qtype eq 'option') {
+ $r->print('</td></tr></table>');
+ }
+# End Response
+ $r->print('</td></tr></table><br />');
+ }
+# Hint
+ $r->print(&hint());
+# Store Button
+ $r->print(
+ '<input type="submit" name="storeproblem" value="Store Changes" /></form>');
} else {
$r->print('Could not identify problem.');
}
Index: loncom/homework/simpleproblem.problem
diff -u loncom/homework/simpleproblem.problem:1.2 loncom/homework/simpleproblem.problem:1.3
--- loncom/homework/simpleproblem.problem:1.2 Mon Jul 7 03:32:16 2003
+++ loncom/homework/simpleproblem.problem Wed Jul 9 02:23:20 2003
@@ -40,7 +40,6 @@
<foil location="$position[6]" value="$value[6]" name="radiofoil6">
<startouttext />&EXT('resource.0.text6')<endouttext />
</foil>
-</foilgroup>
<foil location="$position[7]" value="$value[7]" name="radiofoil7">
<startouttext />&EXT('resource.0.text7')<endouttext />
</foil>
@@ -53,6 +52,7 @@
<foil location="$position[10]" value="$value[10]" name="radiofoil10">
<startouttext />&EXT('resource.0.text10')<endouttext />
</foil>
+</foilgroup>
<hintgroup>
<startouttext />&EXT('resource.0.hinttext')<endouttext />
</hintgroup>
@@ -60,7 +60,7 @@
</block>
<block condition="&EXT('resource.0.questiontype') eq 'option'">
-<optionresponse max="$max" id="radiosegment" randomize="$randomize">
+<optionresponse max="$max" id="optionsegment" randomize="$randomize">
<foilgroup options="$options">
<foil location="$position[1]" value="$value[1]" name="optionfoil1">
<startouttext />&EXT('resource.0.text1')<endouttext />
@@ -80,7 +80,6 @@
<foil location="$position[6]" value="$value[6]" name="optionfoil6">
<startouttext />&EXT('resource.0.text6')<endouttext />
</foil>
-</foilgroup>
<foil location="$position[7]" value="$value[7]" name="optionfoil7">
<startouttext />&EXT('resource.0.text7')<endouttext />
</foil>
@@ -93,6 +92,7 @@
<foil location="$position[10]" value="$value[10]" name="optionfoil10">
<startouttext />&EXT('resource.0.text10')<endouttext />
</foil>
+</foilgroup>
<hintgroup>
<startouttext />&EXT('resource.0.hinttext')<endouttext />
</hintgroup>
Index: loncom/homework/simpleproblem.problem.meta
diff -u loncom/homework/simpleproblem.problem.meta:1.1 loncom/homework/simpleproblem.problem.meta:1.2
--- loncom/homework/simpleproblem.problem.meta:1.1 Sun Jul 6 06:40:35 2003
+++ loncom/homework/simpleproblem.problem.meta Wed Jul 9 02:23:20 2003
@@ -18,30 +18,10 @@
<subject></subject>
<title>Simple Problem Template</title>
-<parameter part="0" name="totalfoils" type="int_pos" default="" display="Total Foils"></parameter>
-
-<parameter part="0" name="maxfoils" type="int_pos" default="" display="Max Foils"></parameter>
-
-<parameter part="0" name="questiontype" type="string" default="radio" display="Questiontype"></parameter>
-
-<parameter part="0" name="text1" type="string" default="" display="Text 1"></parameter>
-
-<parameter part="0" name="value1" type="string" default="true" display="Value 1"></parameter>
-
-
-<parameter part="0" name="text2" type="string" default="" display="Text 2"></parameter>
-
-<parameter part="0" name="value2" type="string" default="false" display="Value 2"></parameter>
-
-
-<parameter part="0" name="text3" type="string" default="" display="Text 3"></parameter>
-
-<parameter part="0" name="value3" type="string" default="false" display="Value 3"></parameter>
-
-
-<parameter part="0" name="text4" type="string" default="" display="Text 4"></parameter>
-
-<parameter part="0" name="value4" type="string" default="false" display="Value 4"></parameter>
-
-<parameter part="0" name="questiontext" type="string" default="Dude!!!" display="Question Text"></parameter>
+<parameter part="0" id="optionsegment" package="optionresponse"></parameter>
+<parameter part="0" id="radiosegment" package="radiobuttonresponse"></parameter>
+<parameter part="0" package="part"></parameter>
+<stores part="0" name="awarded" type="float" display="Partial Credit Factor [Part: 0]"></stores>
+<stores part="0" name="solved" type="string" display="Problem Status [Part: 0]"></stores>
+<stores part="0" name="tries" type="int_zeropos" display="Number of Attempts [Part: 0]"></stores>
--www1057731801--