[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>&nbsp;</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.'" />&nbsp;&nbsp;'.
+		      &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--