WeBWorK Main Forum

Issue with GeoGebra Problems in WeBWorK 2.18

Issue with GeoGebra Problems in WeBWorK 2.18

by Bianca Sosnovski -
Number of replies: 2

Hi everyone,

Our WeBWorK courses use GeoGebra in certain problems. However, since upgrading to WeBWorK version 2.18, these problems are no longer functioning.

Below is the error message for a specific problem.

We do have the AppletObjects.pl macro located in /opt/webwork/pg/macros.

Any insights or solutions would be greatly appreciated!

Error messages

ERRORS from evaluating PG file: Can't locate object method "new" via package "GeogebraWebApplet" (perhaps you forgot to load "GeogebraWebApplet"?) at line 75 of [PG]/macros/AppletObjects.pl from within main::GeogebraWebApplet called at line 41 of BMCCGGB/Sand5.pg

Error details

ERROR caught by Translator while processing problem file: BMCCGGB/Sand5.pg


ERRORS from evaluating PG file:
Can't locate object method "new" via package "GeogebraWebApplet" (perhaps you forgot to load "GeogebraWebApplet"?) at line 75 of [PG]/macros/AppletObjects.pl
   from within main::GeogebraWebApplet called at line 41 of BMCCGGB/Sand5.pg

Input Read:


1:	## DBsubject(Algebra)
2:	## DBchapter(Conic sections)
3:	## DBsection(Circles)
4:	DOCUMENT();  
5:	loadMacros(
6:		"PGstandard.pl",
7:		"MathObjects.pl",
8:		"PGinfo.pl",
9:		"AppletObjects.pl",
10:	    #"source.pl",
11:		"PGcourse.pl",
12:	        "contextFraction.pl"
13:	);
14:	TEXT(beginproblem());
15:	
16:	$showPartialCorrectAnswers = 1;
17:	
18:	Context("Fraction");
19:	Context()->variables->add(y=>"Real");
20:	Context()->variables->add(z=>"Real");
21:	
22:	$d=list_random(2,3,5,7);
23:	do {$a=list_random(-2,-3,-5,-7,2,3,5,7);} until (gcd($a,$d)==1);
24:	$m=Fraction($a,$d);
25:	$b=non_zero_random(-5,5);
26:	
27:	$answer = Compute("($a/$d, $b)");
28:	######################################
29:	# Create  link to applet:
30:	###################################
31:	# You can name your applet (anything reasonable :-) )
32:	# Adjust the height and width as desired
33:	# Paste the geogebra parameters in at the bottom of the page just above the 
34:	# command end command
35:	# so that they don't get in the way
36:	###################################
37:	
38:	
39:	$appletName = "ggbfoo";
40:	$applet =  GeogebraWebApplet(
41:	   code       => "geogebra.GeoGebraApplet",
42:	   #archive    => "geogebra.jar",
43:	   #codebase                 => findAppletCodebase("geogebra.jar"),                           
44:	   appletName              => $appletName,
45:	   appletId                    => $appletName,
46:	   submitActionAlias     => 'getAppletValues',  # default actionAlias
47:	   initializeActionAlias   => '',  # default actionAlias
48:	   setStateAlias             => 'setXML',
49:	   getStateAlias             => 'getXML',
50:	   setConfigAlias           => '',
51:	   getConfigAlias           => '',
52:	   returnFieldName       => '',
53:	   width                 => 400,              # may want to modify width
54:	   height                => 400,              # may want to modify height 
55:	  # mayscript             => "true",
56:	   debugMode             => 0,   # set debugMode to 0 for no debug
57:	                                              # to 1 to make xml representation visible
58:	                                              # to 2 to add alerts detailing progression
59:	                                              # through the applet
60:	   onInit                => 'ggbOnInit',
61:	   type                  => 'geogebraweb',
62:	   submitActionScript    => qq{ getQE('answerBox').value = getAppletValues() },
63:	   selfLoading           => 1,
64:	   params     => GEOGEBRA_PARAMS(),# paste parameters in 
65:	 
66:	);
67:	
68:	
69:	##################################
70:	# Setup GeogebraWebApplet -- 
71:	###################################
72:	
73:	HEADER_TEXT( MODES(TeX=>'', HTML=><<END_SCRIPT ) );
74:	<script language="javascript">
75:	function ggbOnInit(param) {
76:	   var applet = document.$appletName; 
77:			if (param == "$appletName") {
78:	 			applet_loaded(param,1);  // report that applet is ready. 
79:	 			ww_applet_list[param].safe_applet_initialize(2);
80:	 			ww_applet_list[param].object = param;
81:	 			console.log("ggbOnInit: ww_applet_list["+param+"].object = ", ww_applet_list[param].object );
82:	 		}
83:	
84:	}
85:	</script>
86:	END_SCRIPT
87:	HEADER_TEXT( MODES(TeX=>'', HTML=><<END_SCRIPT ) );
88:	<script language="javascript">
89:	function setConfig() {
90:	  var appletState = getQE('${appletName}_state').value;
91:	 //console.log("appletState =" + appletState);
92:	 //console.log( "foobar " +ww_applet_list['$appletName'].object);
93:	       if  (ww_applet_list['$appletName'].object == undefined )  {
94:	                setTimeout("setConfig()", 5000); 
95:	                console.log("waiting");
96:	       } else {
97:	        //console.log("run setConfig");
98:	        //console.log("object is " +ww_applet_list['ggbfoo'].object);
99:	        var applet=$appletName;
100:	        applet.evalCommand("A = (0,1)");
101:	        applet.setCoords('B',1,0) ;
102:	      }
103:	   
104:	}
105:	</script>
106:	END_SCRIPT
107:	
108:	
109:	
110:	HEADER_TEXT( MODES(TeX=>'', HTML=><<END_SCRIPT ) );
111:	
112:	<script language="javascript">
113:	function getAppletValues() {
114:	    console.log("getAppletValues() entered");
115:		// get a handle for the applet object
116:		var applet = $appletName;
117:		var m = applet.getValue("m");
118:		var b = applet.getValue("b");
119:		
120:	        return( m + ',' + b); 
121:	}
122:	 </script>
123:	END_SCRIPT
124:	###################################
125:	#insert applet into body  -- this does not need to be changed
126:	# except to adjust the insertion of the reinitialize_button or 
127:	# a hidden AnswerBox
128:	###################################
129:	 TEXT($PAR,  MODES(TeX=>'geogebraweb code', 
130:	                      HTML=>$applet->insertAll(
131:	                                debug =>0, 
132:	                                reinitialize_button => 1, 
133:	                                includeAnswerBox=>1,
134:	 )));
135:	
136:	#######################################
137:	# TEXT
138:	#######################################
139:	Context()->texStrings;
140:	BEGIN_TEXT
141:	Graph the line with following equation.
142:	$BR
143:	$BR
144:	\( \displaystyle y= $m x+$b\)
145:	$BR
146:	$BR
147:	Answer by placing points \(A\) and \(B\).
148:	$BR
149:	$BR
150:	Click the submit answers button when you are done.
151:	$PAR
152:	
153:	$PAR
154:	END_TEXT
155:	
156:	#TEXT($PAR, "foostate |", $inputs_ref->{ "${appletName}_state"}, "|");
157:	
158:	TEXT( "run SetConfig", q!<script language="javascript">setConfig()</script> !) if $inputs_ref->{ "${appletName}_state"} =~ "restart_applet";
159:	
160:	#########################################
161:	# ANSWER section
162:	#########################################
163:	
164:	NAMED_ANS( 'answerBox' => $answer->cmp( tolerance => .01 ));
165:	
166:	sub GEOGEBRA_PARAMS {
167:	    my $result = {
168:	showResetIcon=>"false" ,
169:	enableRightClick=>"false" ,
170:	enableLabelDrags=>"false", 
171:	showMenuBar=>"false" ,
172:	showToolBar=>"false", 
173:	showAlgebraInput=>"false", 
174:	useBrowserForJS=>"true", 
175:	ggbbase64=>"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"};
176:	$result;
177:	}
178:	ENDDOCUMENT();


In reply to Bianca Sosnovski

Re: Issue with GeoGebra Problems in WeBWorK 2.18

by Danny Glin -

The error message shows the path to the macro file as [PG]/macros/AppletObjects.pl, which indicates that it is an old version of the macro.  As of 2.18 the path to that macro is [PG]/macros/graph/AppletObjects.pl.

I'm guessing one of two things is happening:

  1. Your pg folder didn't get updated to 2.18.  In this case you will need to check out the PG-2.18+ tag using git.
  2. There is an old copy of AppletObjects.pl residing in /opt/webwork/pg/macros.  If there is also a copy of that file in /opt/webwork/pg/macros/graph, then you should remove the one in /opt/webwork/pg/macros.
In reply to Danny Glin

Re: Issue with GeoGebra Problems in WeBWorK 2.18

by Bianca Sosnovski -

Hi Danny,

Thank you for your quick response to my inquiry. I found two copies of the file—one in opt/webwork/pg/macros and another in opt/webwork/pg/macros/graph. Deleting the one in opt/webwork/pg/macros resolved the issue.

I appreciate your help!