text:
Directory Listing
|Sticky Revision:
removed ======
merging with HEAD 6/23/2008 see Value.pm for list of significant changes
- [ ] pg - [ ] lib - [ ] Value - [ ] inheritance improvements The make() method now inherits all the settings of the parent object, so that flags set by the user (e.g., tolerances, periods, and so on) will be passed on as new objects are created. For example, in $x = Real(1)=>with(tolerance=>.0001); $y = sin($x); $y will also have tolerance set to .0001. This also applies to binary operations, where the result will now inherit all the values of either operand, with the left-hand operand taking precedence when they both have a flag set but to different values. This is a significant change, and there may be unforeseen side effects that I'll have to take care of as they appear. It passes my test suite, however, so I'm hoping they will be limited. - [ ] AnswerChecker.pm - [ ] allow diagonostics to work for Complex types - [ ] equivalent wrong answer message is now part of Formula->cmp - [ ] bug fixes - [ ] Complex.pm - [ ] inheritance - [ ] Context.pm - [ ] point context no longer includes vector operations - [ ] error message methods Allow conversion of error messages after the value substitution has been performed. Also provide a subroutine to do more complex conversion of error messages: Context()->{error}{convert} = sub { my $message = shift; ... manipulate message ... return $message; } - [ ] Formula.pm - [ ] 1.59 fixed memory leak. - [ ] bug fixes - [ ] Infinity.pm - [ ] bug fixes - [ ] Interval.pm - [ ] generalize input Allow interval data to be given in more forms (eg, (a,b,"(",")") in addition to ("(",a,b,")"), since that is the order that the value() method returns the data.) - [ ] bug fixes - [ ] List.pm bug fixes - [ ] Matrix.pm - [ ] inheritance - [ ] Point.pm - [ ] inheritance - [ ] Real.pm - [ ] inheritance - [ ] Set.pm - [ ] bug fixes - [ ] improved error reporting - [ ] String.pm - [ ] Union.pm - [ ] improved error reporting - [ ] Vectorpm - [ ] inheritance - [ ] ijkAnyDimension Make vectors that are creates using ijk notation remain in ijk notation when displayed. (This is easy now that objects produced by combining others inherit the parent objects' flags.) Added another context flag (ijkAnyDimension) that controls whether vectors in ijk notation will conform to whatever dimension is used by the vector they are being compared to. When set, i+2*j will equal <1,2> even though i and j are vectors in 3-space. The value of ijkAnyDimension is 1 by default. This eliminates the need for the Vector2D context. - [ ] WeBWorK - [ ] Translator.pm bug and security fixes - [ ] Parser memory leak Formula objects and Context objects contain reference loops, which prevent them from being freed properly by perl when they are no longer needed. This is a source of an important memory leak in WeBWorK. The problem has been fixed by using Scalar::Util::weaken for these recursive references, so these objects can be freed properly when they go out of scope. This should cause an improvement in the memory usage of the httpd child processes. - [ ] Context.pm point to name attribute - [ ] Differentian.pm improved differentiation of log() and abs() - [ ] bug fixes - [ ] operator // provides in line fractions in TeX form a//b is in-line - [ ] BOP-bug fixes - [ ] Context - bug fixes - [ ] Function - - [ ] numeric2.pm In the past, Formula objects included a pointer to the Context in which the object was created, but other MathObject did not. This update is the first round of updates to include the context in the other MathObjects, but more work needs to be done. - [ ] Legacy - [ ] NumberWithUnits.pm Has this been replaced??? Fixed a problem where Real's were being promoted to NumberWithReals during the numeric comparison (when units should be ignored). This error was a result of the changes made this summer. [This class should probably be redesigned to implement the overloaded operators and, in particular, handle the equality check in compare() rather than an over-ridden cmp_parse. That would make it possible to manipulate numbers-with-units via perl code in a natural way, just like all the other MathObjects.] - [ ] List - [ ] UOP --bug fixes - [ ] Applet - [ ] Fraction.pm - [ ] List.pm - [ ] Parser.pm - [ ] Units.pm - [ ] Value.pm - [ ] VectorField.pm - [ ] macros - [ ] PGchoicemacros.pl - [ ] PGinfo.pl - [ ] compoundProblem.pl - [ ] contextPiecewiseFunction.pl - [ ] parserAssignment.pl - [ ] PGstringevaluators - [ ] contextInequalities - [ ] PGbasicmacros.pl - [ ] PGfunctionevaluators.pl - [ ] AppletObjects.pl - [ ] parserFormulaUpToConstant.pl - [ ] parserRadioButtons.pl - [ ] dangerousMacros.pl Fix loadMacros() and alias() so that they find auxiliary files even when the .pg file is in templates/tmpEdit. The Library Browser has a bad interaction with browser image caches if it displays two .pg files with fixed .gif files that have the same name (this happens in several of the setMV* files, for example setMVlevelsets/levels-1/levels-1.pg and setMVlevelsets/levels-2/levels-2.pg). This fixes the problem by including a portion of the file name in the name of the gif file to (help) make it unique. - [ ] extraAnswerEvaluators.pl Modifications to pass answer label for previous answer. This still does not provide correct functionality because the previous answer is an equation of the form lhs = rhs while the form being passed to fun_cmp is lhs - rhs - [ ] MultiAnswer.pl (renamed from MultiPart) -- point to features - [ ] contextCurrency.pl -- new - [ ] PGnumericevaluators.pl -- new - [ ] PGmiscevaluators.pl -- new - [ ] PGtextevaluators.pl -- new - [ ] contextLimitedPolynomial.pl -- point to features - [ ] PGgraphmacros.pl Changed plot_functions so that it uses the Formula MathObject to parse the the function in $f1 = qq! x^2 - 3*x + 45 for x in [0, 45) using color:red and weight:2! instead of using the built in perl parser. This allows things such as $formula=Formula("|x|"); $f1 = qq! $formula for x in [0, 45) using color:red and weight:2! to be evaluated. There should be no apparent change to old problems since the Formula MathObject parser handles a superset of the builtin perl parser syntax. -- some conflicts with old matrix types. - [ ] displayMacros.pl --- remove???? -- only used in webwork 1.9 - [ ] problemPreserveAnswers.pl This is a temporary hack that allows sticky answers to preserve all the characters the student typed. PGbasicmacros.pl currently removes several characters, including $, which is needed for monitary answers. Eventually, PGbasicmacros.pl should be fixed, but for now this will work, and it should not cause trouble after PGbasicmacros.pl is fixed. In the end, this file can be emptied, then it should issue a warning message, and finally it can be removed. The hack is to copy the inputs_ref and modify the answers so that the PGbasicmacros.pl macros will not remove those characters (the key is to convert them to HTML entities instead). Then after the problem has been processed, we put the original answers back so that the answer checkers will work properly on them. This is accomplished by replacing ENDDOCUMENT with a new routine that first puts back the answers and then calls the old ENDDOCUMENT. This has the unwanted side effect of putting error messages into the error log, but I can't seem to work around that. - [ ] problemRandomize.pl -- new Had a typo: answer_submitted should have been answers_submitted, but it turns out that this is ALWAYS set, even when answers AREN'T submitted, so I had to look for the individual buttons instead. This might break if someone adds more buttons, but it works for now. - [ ] answerHints.pl -- new Use alternative method of testing if whether two objects are the same (without causing them to stringify first). [Technically, this should call Value::address, the renamed version of Value::Ref, but I didn't want the AIM participants to have to update to the latests version of MathObjects to be able to use this.] Revision 1.1 / (view) - annotate - [select for diffs] , Wed Aug 15 02:58:26 2007 UTC (10 months, 1 week ago) by dpvc Branch: MAIN This file implements a postfilter for AnswerEvaluators that allows you to specify answer hint messages to use when specific answers or sets of answers are given by the student. You can use specific constants or a perl subroutine to determine which answers to respond to. You can also specify a score to use when the answers are triggered, and whether to replace existing messages or not. See the comments in the file for more details. - [ ] answerVariableList.pl -- point to features - [ ] contextLimitedPowers.pl -- point to features Updated to allow more flexibility in controlling the range of powers to be allowed (as per John Jones' suggestion). Also changed the way that you request the changes: you now make a function call rather than modify the operators list directly yourself. (The old way is still provided, however, for backward compatibility.) See the comments in the file for more details. - [ ] contextScientificNotation -- new Use new feature to make Real() create ScientificNotation objects. -- fix e vs. E used by perl-- safe compartment troubles? - [ ] contextString.pl - [ ] bug fixes - [ ] parserAutoStrings.pl -- new - [ ] parserFunction.pl -- point to features - [ ] parserMultipart.pl -- remove???? - [ ] doc
Merging HEAD to rel-2-4-dev 6/23/2008 View Value.pm for a complete list of changes.
This commit was manufactured by cvs2svn to create branch 'rel-2-4-dev'.
Backport changes
backport (dpvc): Fix DOS and Mac line endings, and make the detection of non-text files a little more strict (DOS files were being marked as non-text). Also, localize the file handles.
backport (sh002i): widen path field of NPL-path table to 4096 to acommodate longer paths. linux's max path length is 4096.
backport (sh002i): "Show Hints" and "Show Solutions" checkboxes.
backport (sh002i): remove stale pidfiles on stop.
backport (sh002i): When viewing a file-based problem library, don't show to problem library's prefix in the "select a problem collection" popup. This can significantly shorten the length of the options in that popup, making them more managable.
backport (sh002i): Fixed the name of the transaction log.
backport (sh002i): Bring back the green bar, which some students appear to worship.
check for Exception::Class (which is used by NewSQL)
"improved" the help files -- Mike
Added blank line to top of file to allow POD documentation to work properly.
Added line at top of page to allow POD documentation to work.
updated for 2.4.1
backport (sh002i): Extended the set definition file format to support commas in the source_file field (as well was the value and max_attempts fields).
backport (sh002i): ignore .svn directories in problem libraries (%ignoredir)
backport (jj): Add more indexing, small disk space expense and hopefully more speed.
backport (jj): Textbook chapters and sections will now include their numbers in the library browser, and be sorted accordingly.
backport (jj): Improved handling of textook chapters and sections (should be entered based on their number, not the DBchapter and DBsection name). Also improved handling for problems which are tagged to a chapter, but not to a particular seciton in the chapter.
backport (glarose): bug fix: somehow I seem to have mixed up the logic in the message that gets displayed on the sets page for tests that are still open/over time. Sam: if you can get this into 2.4, that'd be great. Thanks.
backport (dpvc): Work around IE bug where pressing return submits a form but does not set the submit button's value properly in some circumstances.
backport (dpvc): Allow unpacking of .tar.gz and .tar files in addition to .tgz files.
backport (glarose): bug fix. when updating to hide set header display I assumed that the $db->getMergedSet($userToShow, $setID) would succeed, which isn't the case for a set that isn't assigned to any users (in particular, which isn't assigned to the instructor who is editing the set). this bug fix resolves that by instead using the global set to determine if headers should be displayed when the call to get the merged set fails.
Resolve bug #1293 by actually throwing a RecordExists exception from NewSQL::Std.
updated version numbers
updated copyright dates
backport (jj): Sort entries which will appear in the library browser (chapter titles, section titles, etc.).
backport (jj): Revise how institution will be dealt with in the problem library. Currently, the information is not used so the changes are innocuous.
backport (dpvc): Backing out of Mike's change to previewAnswers. Setting that to 0 means the grader will not be run when the problem is first shown, and that means the notes provided by the grader (like "You can earn partial credit on this problem") won't be shown until the student first provides an answer. These messages are important, particularly for sequential problems, and so need to appear even when the problem is first shown, not just when answers have been submitted. If Mike had another reason than just efficiency for not processing answers on the first invocation of a problem, that will need to be handled in a more sophisticated way.
Fix PG_restricted_eval so that no lexicals are used in the scope of the eval()
Added a version of PGstandard.pl which loads PG.pl, PGbasicmacros.pl, PGanswermacros.pl, and PGauxiliaryFunctions.pl. It also includes POD docs!
pull in additional seed variables from dir_config (not used right now, but makes things somewhat more flexible)
will it never end?!?!?
backport (jj): move NPL into main webwork distribution/database
bring in sync with HEAD (remove comments)
tiny backport from head: formatting, use $apache_use_ssl
backport (gage): Added more padding to .info-box ol so that you can have more than 10 items in a numbered list (otherwise the numbers like 15 were being cut off to 5
backport (sh002i): not sure how that guy got in there...
bring webwork.apache[2]-config.dist up to date with HEAD
backport (gage): Try this again.
backport (gage): Update -- added reference to the union theme in addition to the moodle and math themes
backport (gage): Stop a recurring error on hosted2 -- unfortunately I'm not sure what was triggering this error. I couldn't generate it but an undefined set_id warning occured in many log entries from one course.
backport (gage): don't use hardwired mysql and mysqldump commands.
backport (gage): An updated template to use for new problems. A change in global.conf must be made to use this. Search for blankProblem
backport (gage): Allow several blank problems to be added at once to a set.
backport (gage): Adding warnings when dates are not correctly defined
backport (glarose): Make sure logic in score display is correct.
backport (dpvc): Make TEXTAREA fields float above jsMath output as well as INPUT fields.
backport (gage): Added check for Email module
backport (sh002i): use $ce->{externalPrograms}{gzip} rather than 'gzip'.
backport (sh002i): change default location of gzip to match FHS, remove old disabled code
backport (apizer): add gzip to list of apps to check for
backport (apizer): Change externalPrograms{tar} from /usr/bin/tar to /bin/tar which is the "standard" location for tar
backport (glarose): Fix typo.
backport (sh002i): move $defaultTheme above $webworkFiles{stylesheet} so that it actually works.
backport (glarose): Update ProblemSet editing to take out editing of set headers for gateway tests; this is a bit of a hack to deal with the problem that editing/trying the set header fails for a gateway test. In that the set header file isn't used for gateway tests I think this is probably reasonable behavior.
backport (jj): If we allow a user to see a problem rendered in Undefined_Set, then they have to have permission to use instructor tools.
when using loadMacros, add a newline before the file's contents in the eval() statemet. this allows a POD directive on the first line of the included file.
backport: bring rel-2-4-dev in sync with HEAD
allow value '' for restrict_ip to mean the same thing as "No"
set the default value of restrict_ip to No
backport (sh002i): UGH! work around egrigious bug in course archiving code.
backport (glarose): Update restrictions on set access to ignore the case of the set named 'Undefined_Set', which is used by the library browser to view problems.
backport (gage): This is an experimental version of PGcomplexmacros2Exp.pl
Use defaultTheme
forward-port (gage): Don't processAnswers the first time a page is viewed. (Process answers only if the submitAnswers, previewAnswers or checkAnswers button has been pressed.)
forward-port (gage): Change the record key field to "0" from "1". This picks out the studentID which is usually in the first column. This is a temporary fix. We should change the scoring and merge features to use the login as the primary key. That can await a general cleanup and code factoring for the scoring and grade calculations throughout WeBWorK.
backport (dpvc): Bring jsMath up to version 3.4c. This version adds new functionality to jsMath; in particular, most of the macros and environments from the amsmath AMS-LaTeX package are now available in jsMath's AMSmath extension. There are also some bug fixes. See the change log for more details.
fix "allow from all", fix capitalization, remove cruft
updated for 2.4.x
This commit was manufactured by cvs2svn to create branch 'rel-2-4-dev'.
Update database handling to save the last submitted answer to problems for every preview or new page.
bug fix to avoid warnings when dealing null fields with setting hide_score and hide_score_by_problem for users.
Sync treatment of keywords to current version of loadDB2.
Pod documentation upgrades
Pod documentation added
Added pod documentation
Added Davide Cervone's methods for evaluating formulas module 2pi Used in complex variables in particular.
Fixed an error with List answer checking when one of the elements was the constant 0 (a check for whether a value was defined was not properly handling the case when the answer is zero (which counts as false in a boolean check)).
When complex=>'ok' is used, make a COPY of the Complex context before modifying it. (Otherwise we modify the ORIGINAL copy, and that is persistent from problem to problem within one httpd child, which would mean one problem could affect later ones.)
Allow Real object to override the context's number format by setting its format field. E.g.: Real(1.2345)->with(format=>"%.2f")
Update pod.
Bring jsMath up to version 3.4b
removed test file
test file
support log messages which have only added or deleted files, and no modified files.
Add where_student_id_eq clause for searching users.
Added directory listing when a directory is being deleted. The listing will show the total number of files in the direcotry, and the top level contents of the directory (with numbers of items in the each subdirectory listed, but not the contents). This resolves bug #1246.
Update to v3.4a, which includes: * Fixed a problem with the noImageFonts plugin where extra fonts would still try to use image fonts even when they were supposed to be disabled. Also, noImageFonts now adjusts the error message to indicate that unicode fonts will be used for fallback rather than image fonts. * Fixed a problem where changes in the CSS line-height attribute could cause alignment problems with arrays in MSIE. * Fixed a number of alignment problems with MSIE when used with a DOCTYPE that triggers "standards" mode rather than "quirks" mode. * A bug fix needed for MSIE6 that is one of the sources of jsMath's slowness with MSIE is now disabled when MSIE7 is used, since it is no longer needed in that version. This should give a noticable speed improvement for jsMath in MSIE7.
Clear the error message in Context before it is used in an answer checker (prevents bleading of one error into a later answer).
Check for defined values to avoid uninitialized multiplication errors.
Modified the way the Parser-based versions of the traditional answer checkers get copies of their contexts. They now use a new method getCopy to obtain the copy either from the problem's context table or the default table (rather than only from the default). That way the instructor can use parserCustomization.pl to customize the contexts used by the answer checkers.
Added a Vector2D context that has i and j defined as vectors in 2-space so that they can be used to generate vectors in 2D. This avoids students getting the "incorrect number of coordinates" error.
Bug fixes. $urlPath->arg("setID") isn't always defined in our calls to Authz::invalidIPAddress, and FormatRecords needs to know about versioned sets. The latter fixes the bug in Hardcopy that just (didn't) get fixed with the previous (not well enough tested) fix.
bug fix: correct "sid" => "set_id"
Bug fixes: correct hideWork -> hide_work, and ensure version numbers get appended to started tests.
Add set-level proctor login password for proctored gateway/quiz assignments, improve handling of proctor keys and permissions for proctored assignments, bug fixes for recently added features. This commit - adds the ability to specify a set-level proctor for proctored gateway/quiz assignments. this is done by adding a proctor with a username "set_id:setName", where "setName" is the name of the set, adding a "restricted_login_proctor" field to the set tables in the database, and allowing Authen::Proctor and ContentGenerator::LoginProctor to appropriately deal with this possibility. - updates proctor permissions and status in global.conf.dist, changing the old "proctor_quiz" permission level (3) into two levels, "proctor_quiz_login" and "proctor_quiz_grade". wwdb_upgrade includes a stanza to make this change to proctors that already exist in courses. - adds a "Proctor" status in %statuses in global.conf, with no valid behaviors. this allows the creation of proctor users in a course who have the permissionLevel to login (and thus proctor), but not to access the course. - improves GatewayQuiz explanatory messages when scores or work are hidden. - improves GatewayQuiz proctor key management, especially for tests with more than one allowed attempt. this includes adding a deleteAllProctorKeys() method to DB.pm. - updates Instructor Tools, UserList.pm and ProblemSetDetail to deal with set-level proctoring. c.f. the note below about the ramifications of these changes. - updates ProblemSetList to deal with new problem set fields set_locations and set-level proctors that are located in a different database table than the set data. - fixes bugs in UserList and ProblemSetDetail dealing with the setting of hide_score, hide_score_by_problem, and time_limit_cap. This update hides set-level proctor users from the classlist editor (UserList.pm) and instructor tools (Index.pm) interfaces. They can be created, modified, and deleted at the homework sets editor page (ProblemSetDetail.pm) only, and there only implicitly: we never indicate that a user is being created or modified behind the screen.
Update ProblemSetDetail to set both hide_score and hide_score_by_problem set fields with a single selector. This is general, in the sense that it should allow other combinations of fields to be set if that's appropriate. This is a tentative commit; we may choose to back out the changes later, especially if the data model for hiding scores is changed.
Update to add preliminary support for hiding scores on problems only.
Patch to set default for time_cap set definition import and include problem_randorder in set definition export.
Finally patch addUserProblem to use grok_vsetID.
Some bugfixes, preliminary commit of relax_restrict_ip function. this commit - adds relax_restrict_ip and hide_score_by_problem columns to the set and set_user tables - adds the corresponding fields to the Set and UserSet DB Records - patches 'no location' handling in the location management routine in CourseAdmin.pm - improves Authz->checkSet's handling of the case of location restriction when no addresses exist for a location, makes it use any cached set that may be available, and makes it honor relax_restrict_ip - corrects a typo and some comments in DB.pm - allows ip restriction fields in ProblemSetList when importing from or exporting to set definition files - updates ProblemSetDetail.pm to handle the relax_restrict_ip field The relax_restrict_ip function has not been well tested. hide_score_by_problem isn't yet used.
Usability update: add direct edit links to list of displayed locations, ability to delete multiple locations selected from the list.
Bug fix. Check for locations has to be with a non-versioned set_id.
Back out error checking of input data fields. This doesn't work with the initial conversion of a set to a gateway/test assignment, because at that point the fields have to be zero or empty.
More gateway fixes/additions. This commit - moves javascript code for gateways into htdocs/js/gateway.js, - updates the gateway template to use that, - updates the gateway CSS file to use Louis Zulli's workaround for IE6 not honoring position:fixed, and adds CSS definitions for a score reporting box for multi-page, multi-attempt quizzes, - updates the GatewayQuiz module to print a score reporting box for multi-page, multi-attempt quizzes, - updates the Grades module to correctly sort problems for GatewayQuiz assignments that have randomly ordered problems, and - adds some error checking to ProblemSetDetail to avoid people doing things like submitting a zero time limit for a gateway.
Change permission levels to display and edit levels as user roles (guest, student, proctor, ta, professor) rather than numerical values.
Update checkKeyfields to allow IP masks of the form [address]/[mask]
Update for centralization of set-level validity checks in Authz: check for homework assignments being sent to the gateway content generator.
Follow up commit of IP address restriction code. This adds IP address location management to CourseAdmin.pm, corrects a typo for location address management in DB.pm, and makes ProblemSetDetail.pm prettier when displaying locations for restrictions.
Second preliminary commit of changes to move set-level valid checks to Authz. This makes ProblemSet.pm and Problem.pm use the $self->{invalidSet} value set by ContentGenerator.pm, and means that regular homework assignments may now be restricted to specific IP addresses. This commit also corrects $userName/$effectiveUserName errors I had in Authz->checkSet() and moves the actual IP address checking to a separate subroutine in Authz. Hardcopy.pm uses that routine to filter sets to be sure it doesn't generate hardcopies for a IP address restricted set.
Update to clean up some code and use the ContentGenerator level check for set validity. This update also updates indenting, standardizing on a tab-based indent, which means that the diff will show almost all of the code as changing. Sorry about that.
Preliminary commit of changes to Authz.pm and ContentGenerator.pm to move set-level checks for set validity (set is open, published, IP address restrictions, etc.) out of the individual ContentGenerator modules. ContentGenerator now uses Authz::checkSet to check these and stores any return message in $self->{invalidSet}. Individual ContentGenerator modules can take advantage of this by checking the value of $self->{invalidSet} that is preset (thus, this change should be transparent for unchanged ContentGenerators).
Fix bug in site_check call.
Preliminary commit of code to restrict access to assignments by client IP address. This commit adds the database tables for IP address restriction, updates check_modules.pl to require Net::IP for address matching, adds database calls in DB.pm for manipulating locations and addresses, and adds location restriction to the set editing in ProblemSetDetail. This commit does not add actual restriction to sets, nor the ability to create locations to which to restrict access.
replace set ID underscores with spaces, not nonbreaking spaces (for IE6)
fix for warning when generating prettySetID
Bring jsMath up to version 3.4. This includes a number of bug fixes. See the jsMath web site for the change log, which contains the details. http://www.math.union.edu/locate/jsMath
don't up nonbreaking spaces in set names :P
replace underscores with spaces in set names the links menu
Added authentication mechanism Cosign.pm. This implements WeBWorK authentication using cosign[1], an open-source single sign-on system developed at the University of Michigan. This should be a reasonable model for other modules implementing external, directory or location based, authentication for WeBWorK. To use cosign authentication for WeBWorK, set $authen{user_module} in global.conf to WeBWorK::Authen::Cosign, and then configure apache to require cosign authentication to enter WeBWorK courses. If $cosignoff is set to a true value in the course environment, standard WeBWorK authentication is used for that course. Note that cosign is a cookie-based authentication system. This means that it is between very hard and impossible to authenticate multiple users on the same computer/web browser at the same time. Thus it is not possible to have both $authen{user_module} and $authen{proctor_module} set to Cosign at the same time. Implementation: Cosign.pm inherits from Authen.pm. It redefines get_credentials to force password authentication, and then assumes password checks succeed. Because cosign is a Location/Directory based apache authentication system, by the time the user gets to the Authen module we know that she has successfully authenticated against cosign. We also modify the forget_verification method to return a redirect to the course environment variable $cosign_logout_script. [1] <http://www.umich.edu/~umweb/software/cosign/>
Add support for external authentication systems. This is appropriate if something like an apache directory or location based authentication system (such as cosign, basic or digest auth) is used. In these cases, WeBWorK may not handle the logout procedure, and we need information from the Authentication module to determine the correct action. We allow for the case of redirects here, but this could easily be extended if needed. Implementation: pre_header_initialize() checks for $authen->{redirect} to be defined and true after calling $authen->forget_verification(). If to, we set $self->reply_with_redirect to the value of returned by $authen->{redirect}. This update also moves key deletion from body() to pre_header_initialize(), so that those actions take place before any redirect.
Add support for external authentication systems. This is appropriate if something like an apache directory or location based authentication system (such as cosign, basic or digest auth) is used. In these cases, by the time the user gets to a ContentGenerator in the WeBWorK system she has successfully authenticated against the external authentication system, and so if there was an error it indicates that the user was not allowed to enter the course for some other reason. Thus, in this case we print an error message and skip the WeBWorK login form. Implementation: body() checks for $authen->{external_auth} to be defined and true; if so, only the authentication error and an informational message about the external authentication system is printed. If undefined or false, any authentication error is printed and the login form, as usual.
Comment out residual debugging "warn" statement.
fixed message given when an executable is not found -- fixes bug #1153.
accept argument "apache1" or "apache2" to control which modules to check for. this resolves bug #1151.
support for Apache::WeBWorK on the server root -- resolves bug #1150.
Update quiz prefix for arrays. This is not a complete fix, but it gets incrementally closer to a fix.
Make getAllMergedProblemVersions and getAllProblemVersions order returned data by problem ID.
Add export option for gateway set fields. Include time_cap in the list of fields in the set.
Fix state retention when previewing or checking answers by retaining page but not worrying about preview or answer check. Reduce PG translation for multipage tests by only translating problems on submission or as needed when checking. Clean up some calls to get problems so that db->getAll... problems calls are used. Add course logging for preview, newpage, and grading. Add "Show Past Answers" form/button as appropriate. Please note: there is an interesting question about the order in which problems are logged for the case when problems on a test/quiz are ordered randomly. In this case, the problems are logged in the course answer_log in the order in which they appear on the test. However, when viewing grades and student progress, at the moment this is not the case. In the long run we probably want the grades page to conform to the order shown in the test, while we may want the student progress page to match the order seen in the actual test definition. For the moment that's probably a bug.
Add comment requested for heaven's sake.
wrap message for preview. resolves bug #1147.
accidental commit of "die" that i added for testing (whoops).
error handler in the post-connection subroutine that sends the error to the professor by email and also logs it to the apache log. resolves bug #1120, sort of.
added check on the number of addresses in the From and Reply-to fields. this resolves bug #1131.
Corrected typo
Added comments about working with complex variables
Bug fixes in implementation of hide_score and hide_work.
Update for new values of hide_score and hide_work.
Update to make hardcopy generation respect a set's hide_work setting, allow those with permission to generate hardcopies for multiple sets to print versioned sets.
Update to use hide_score and hide_work, adding new values and including the new permissionLevel from global.conf. In ProblemSets.pm also fix hardcopy selector value for gateway tests.
Update Set.pm and UserSet.pm files to reflect more intelligible values of hide_work and hide_score.
Add permissionLevels entry for view_hidden_work.
Update stanzas for modifying hide_score and hide_work columns in set and set_user to have more intelligible names, and add a default value.
Better messages when no recipients are selected -- resolves bug 1130.
This file loads Parser.pl. It is part of a campaign to replace the term "parser object" with MathObject which should sound more intuitive for those who are unaware of the development history of the PG language.
Fixed a deprecated usage of defined(@result)
Update for gateway parameters hide_score until set due date, hide_work until set due date, and add time_limit_cap.
update to allow hide_score until set due date.
add stanzas to update definitions of hide_score and hide_work in set and userset, and to add time_limit_cap column to those tables.
update hide_score and hide_work records for sets and usersets, add time_limit_cap column to tables.
Update set editing to allow new gateway options, fix display of options with labels when editing for users, make more gateway parameters editable for users, add override checkboxes for drop down menus for parameters when editing for users.
Intermediate commit. This should speed up working on long multipage tests by not translating pages that aren't on the current page unless we're grading or checking the test. There is still a bug in the GatewayQuiz module when dealing with multipage, multiattempt tests, however. Management of the grading/ previewing state isn't being handled correctly, so the logic for that needs to be reworked.
Added documentation
re-throw unrecognized exceptions
Update for new NewSQL versioning API.
Add check for whether self->{login_type} is defined. I'm not sure why this is necessary, but we get warnings when entering from LoginProctor otherwise.
Correct addkey to allow for proctor grading keys, restore ordering to listSetVersions.
Update for new newSQL version API.
Clean up code, completely rewrite output of test headers to simplify logical structure.
setting $this_set='' is unnecessary. getMergedSet returns undef in scalar context if the record is not found. also fixed some indentation.
Documenation addition
Format fix
add some external program paths
use path to cp in course environment
better error reporting for external program calls
better error reporting for external programs
Update to fix scoring of multipart problems.
Minor updates to clean comments, some logic, and display of versioned sets.
Update to use new newSQL versioning API. Also fixes display of correct answers so that correct answers to a versioned set are visible if the available attempts on the set are exhausted and the version's answer date has been reached, but not before.
Update sortByName() utility to allow sorting on multiple fields. This allows sorting on set_id and version_id, which is desirable for versioned sets.
replace system() calls with readpipe() calls -- arguments are escaped and stdout/stderr are captured, and exit status is reported accurately.
Formatting changes in documentation
More format changes to documentation
More formatting changes.
Documentation formatting changes
remove old versioning methods that are no longer used by any client code
Updated documentation in response to comments from Davide. More comments welcome. :-) --Mike
Use this macro package to define macros for examining the current environment. Useful for creating problems and for debugging.
Added pod documentation for these files
Correct pretty_print so that it protects for HTML output (replaces < by <)
Correct pretty_print so that it protects < for printing in HTML. Replace occurences of < with < in the data This was done with straight substitution -- perhaps a protectHTML macro should have been used?
Only show the adaptive parameters where there actually ARE some, and fix a typo when looking up the adaptive points when there aren't any.
Improved Formula diagonstics when adaptive parameters are used. They now allow you to graph the functions (they are no longer considered multi-variable functions), and the values reported are the adapted values rather then the unadapted correct answers. This now correctly reflects the tests that are being performed.
Use zeroLevelTol values when checking answers that have adaptive parameters.
explain seemingly nonsensical line of code
remove commented-out sql_table_names hash
reorder sections so that they're in the same order as the tables in database.conf i think the database.conf order makes more sense, anyway. this will make it easier for me to find things.
confirmed a fix by gavin -- i had said "grep" when i should have said "map". (there's no need for the grep, in any case)
use updated Merged.pm rather than VersionedMerged.pm
updates to allow merging and versioning to interact gracefully: - use table aliasing to be able to refer to the same table by two different names - call sql_field_expression to get SQLized field names (the implementation in Versioned.pm returns a SUBSTRING(...) expression) - use the implementations of conv_where and keyparts_to_where from the primary table being merged (this allows Versioned.pm to provide appropriate WHERE conditions) - remove Gavin's change that ignores versioned tables
don't quote table names that are scalar references, dereference them instead
add sql_field_expression method to return a fully-SQLized, quoted expression that can be used to represent the field in a field list or WHERE clause (but not as an lvalue in a SET clause)
don't quote table/field names in grok_*_from_vsetID_sql, do it in caller
Update for NewSQL new versioning API, make a lot of indenting more uniform, make display of versioned sets that are assigned to a user but haven't been taken better.
Update for NewSQL versioned API.
Finish update for weighted problems; update to make attempts_per_version work better for number of attempts greater than one.
Correct listSetVersions to sort output.
Documentation additions
Updated version of the check_modules function. This should make it easier to add more functionality to this file.
Minor documentation changes. Use html entity to represent dollar sign on the web.
Update comments.
Update for new NewSQL database API, improve display of test/quiz assignments.
Update assignUseSetVersionToUser and assignProblemSetVersionToUser to use new NewSQL API.
Update GatewayQuiz ContentGenerator to use new NewSQL API, clean up some comments, deal with bug where last answer would be saved when there are no remaining allowed submissions, update to use maxAttempts == -1 instead of 0, update to try and deal with problems with weights not equal to one (untested).
Updates for new NewSQL Versioned API; update listProblemVersions, getAllProblemVersions, getMergedProblemVersion.
Update to include needed where_ conversion methods: set_id_eq_problem_id_eq and user_id_eq_set_id_eq_version_id_eq.
Update to avoid versioned tables, which are now dealt with in VersionedMerge.pm
New Schema to support merging of versioned sets in NewSQL. This is a horribly brutal hack that seeks to get something working until Sam comes up with one of his gloriously elegant and sophisticated solutions.
Add stanzas for set_version_merged and problem_version_merged. These exist as part of a brutal hack to get NewSQL working with versions. c.f. DB::Schema::NewSQL::VersionMerged.pm
Add conditional to check whether set assignment/unassignment needs to be done before making a database call to do so. Resolves a problem I was having with duplicate entries in set_user being created before a database error was returned warning about duplicate sets.
Avoid an infinite loop when string-values formulas are used in a List. Allow diagonstics to work for complex-valued functions.
set the z-index of the answer boxes so that the jsMath equations will not overlap them. (Some of the TeX fonts have large depths, and this can cause them to overlap the links and input widgets on lower lines in some browsers.) Also use addEventListener or attachEvent to add the onload handler since the window.onload handler can only be used by one piece of code.
THIS UPDATE BREAKS CONTENT GENERATORS: split up methods for versioned and non-versioned sets, and added new implementations for merged versioned sets. (i'm mainly committing this so gavin can see what i've done and give me input.)
add set_version and problem_version tables, change schema for set_user and problem_user tables.
list keyfields explicitly, so that we can have the ProblemVersion keyfields in the correct order (user_id,set_id,version_id,problem_id)
restrict where clauses generated from keyparts which don't mention either set_id or version_id
added keyparts_to_where wrapper for combined set_id/version_id
get_fields_where*: when field list is unspecified, use all fields rather than letting sqlabstract default to "*". (also remove unneeded Data::Dumper import)
added make_vsetID_sql, fixed an off-by-1 in grok_setID_from_vsetID_sql
schema-level support for a version field embedded in the set ID. TODO: - modify DB.pm to NOT use version/non-version specific where clause names, and commit removal of those names from NewSQL.pm (done but not committed yet, since we don't want to break things too badly) - modify DB.pm to provide a completely separate suite of methods for versioned sets/problems
versioned subclasses of UserSet/UserProblem
remove leftover debugging code (Data::Dumper)
Set SMTP envelope sender to $ce->{mail}{smtpSender} rather than user's from address. This prevents some mailservers from rejecting the mail for having a forged sender address.
Added warning message when moodle session is not found.
revert file-based mail status changes (but keep formatting fixes)
Set SMTP envelope sender to $ce->{mail}{smtpSender} rather than user's from address. This prevents some mailservers from rejecting the mail for having a forged sender address.
Added comments about how to install the file.
Completely rewrote the file to use a different technique. Instead of looking for unbeforeunload events (which didn't work reliably, since Firefox will reload the page before it has a chance to install the handler), we look for F5 key events and F5 ignore keydown events, but reload the page on F5 keyup instead. This skips the autorepeating keys and only reloads the page when the user lets go of the key. So there is only one reload. After several autorepeated F5 keypresses, a dialog will appear asking you to check if something is holding down the F5 key.
Corrected comment indicating time was in micro- rather than milliseconds.
Added support for uncheckable radio buttons (when JavaScript it active). You specify an uncheckable buttons by including the uncheckable=>1 or uncheckable=>"shift" options to the RadioButtons() call.
New macros for using Radio buttons with the new Parser
Fixed an error with the custom list checker setting the wrong field for the checker (OOPS!)
Implements a JavaScript solution to prevent excessive reloads by students who prop their books on the F5 key.
Changed the transaction log from a course directory log to a system directory log to work around a bug in surePathToTempFile. this hack works around bug #1133 for now. --Mike
perliminary steps to splitting versioned and non-versioned user sets. TODO: - modify DB.pm to NOT use version/non-version specific where clause names, and commit removal of those names from NewSQL.pm - modify DB.pm to provide a completely separate suite of methods for versioned sets/problems - add VersionedUserSet and VersionedUserProblem records classes, make them subclasses of UserSet and UserProblem. include fake 'version' field. - add boxing/unboxing routines for those record classes. - figure out what to do about listing versioned sets/problems, since some of the keyparts is going to be synthesized. (post-filter on get_fields_where?)
Changed input to rungeKutta4 so that it matches the pod description -- i.e. it takes as its first argument a reference to a subroutine defining a vectorField as opposed to an answer hash.
Added new permissable log files. that can be written to.
Begin pod documentation.
added a "level" to pretty_print to prevent it from descending too far down nested hashes. The default level is set at 3 which is probably enough for most purposes.
Make sure that something gets passed to renderProblems() for the userSet even when a global set is being edited and it isn't assigned to any users. Gets rid of "odd number of elements in hash assignment" errors in renderProblems. Because renderProblems plugs in a fake set if it gets a false value in for the userSet, sending in '' appears to solve the problem.
Removed scommented out code and spiffed up the documentation. --------------------------------------------------------------------
Added code to multi_cmp which makes it easier to debug. We will probably want to get rid of this entirely in favor of List answers, but meantime I'm documenting the problems.
Added space when combining preview latex strings (foo + bar became foo\quadbar which didn't work now its foo \quad bar which is better.
alternate implementation of DelayedMailer that uses Mail::Sender rather than Net::SMTP. This is somewhat more flexible, but currently doesn't play well with Safe.pm. (I forget exactly how, but I have it on record somewhere.)
fix permission not getting set (introduced with prior changes) UGH!
add guestsPermissionLevel parameter
the parameter is called moodle17, not moodle_version
Removed warning message.
Fixed typo in defining PermissionLevels (missing s in teachersPermissionLevel) etc.
fixed typo in "non_native"
fixed typo (calling sql->quote instead of sql->_quote)
fixed lexical redefinition warning
added code to display mail merge status from coursedir/DATA/mailmerge. nothing writes/deletes the status files yet though, that is next. :)
Preliminary Moodle 1.7 support. There is still some work to do on this, but I think it belongs in MAIN now.
add flag to set problem seed in assignProblemToUser and assignProblemToUserSet
removed unused import of WeBWorK::DB::Utils::initializeUserProblem.
Fixed typos. -- Mike
Gave a bit more information when the scoring data (.csv ) file doesn't exist. This gives the user a clue as to what to name the file. -- Mike
Fixed incorrect lookup of which set to view when viewing problems "From This Course". The problem was introduced in version 1.69. Similar errors were also in the other viewing modes, but were corrected for "Local Problems" in 1.70 and for "Set Definitions Files" in 22.214.171.124 (though I have updated the latter to be consistent with the other cases).
Cleaned up code, updated README. There is still much code that needs to be factored. Merged changes in webwork_xmlrpc_client2.pl into webwork_xmlrp_client.pl and removed the first file. -- Mike
Pointing all clients to https://webwork.rochester.edu since this is currently the most stable server.
Factoring code for the WeBWorK webservice clients
pre-load mod_perl2 so that subsequent "use mod_perl" lines don't load mod_perl 1. (this wasn't a problem for us, but it was for others.)
Add a new operator // to be the same as / except its TeX form is a/b rather than \frac{a}{b}. This makes it possible get horizontal fractions in exponents, for example, where vertical fractions often don't look so good.
Use Perl reals rather than Parser Reals in matrix for adaptive parameters.
Fixed type in comment.
preliminary parser for "=for WeBWorKDocs" sections containing lists of perlrefs.
use student ID for password if password field is defined but empty
handle "added files" properly
don't include Safe::Hole anymore
changes for DelayedMailer
use DelayedMailer instead of RestrictedMailer
a stopgap solution to the PG/Net::SMTP problem
move constituency_hash into Utils.pm
use croak instead of die in constructor
Add hide_score and hide_work functions, allowing suppression of the display of the score on the assignment and/or the work the student submitted. Also updates the treatment of due and answer_date fields. Now setting the due and answer dates to the same time will (should?) make answers available once the test is completed (e.g., all attempts are exhausted); setting the answer date to after the due date leaves the correct answers unavailable until a similar time has passed from when the test is completed. And the problem/page jump links are cleaned up to be more concise for multipage tests.
Add hide_score and hide_work fields to the homework list/editor, and to the set definition file import.
Add hide_score and hide_work fields to set editing. Currently these are sequestered in the Gateway Parameters section of the edit form, because the fields are only used by gateway/quiz assignments. In the long run they want to be moved out to apply to assignments more generally.
Add hiding of scores for gateway/quiz assignments with hide_score set.
Correct braces in eval { }. I think we can call this a typo.
Correct addUserProblem for versioned sets. This is probably a fix for a problem that should be dealt with by addressing the issue of versioning more globally in DB.pm. For the moment this deals with the need to check for the existence of a problem against the non-versioned set when adding problems to a user set version.
Add hide_score and hide_work fields to the set and user_set records. These are currently only used by gateway/quiz assignments.
Add hide_score and hide_work columns to the set and set_user tables. These are currently only used by gateway/quiz assignments.
don't die when scoring file doesn't exist (fixes bug #1138).
read_scoring_file: return a reference to an empty hash if filename is "None". This satisfies SendMail.pm, which expects a hashref unless there's an error.
fix moodle 1.5/6 session handling
Moodle 1.7 compatibility: This is Mike's current work on Moodle 1.7 compatibility, cross-ported from rel-2-3-exp. Changes from: lib/WeBWorK/Authen/Moodle.pm: 1.9 -> 220.127.116.11 lib/WeBWorK/DB/Schema/NewSQL/Moodle.pm: 1.5 -> 184.108.40.206
SECURITY: tighter constraints on which macro files can be loaded without restriction. Previously, any file that *contained* the strings PG.pl, dangerousMacros.pl, or IO.pl would be loaded with an empty opmask. This is the second attempt to close this hole. The previous attempt assumed that | binds tighter than ^ and $, which is not true. (Noticed by dpvc). It also failed to escape metacharacters in the file names.
added mail_answers_to3, which currently does not work, to eventually replace mail_answers_to2, which also does not work. I thought now would be a good time to commit this, so that others can look at it if they like. The problem is that when RestrictedMailer is used within a PG safe compartment, it hangs on opening the SMTP connection and the problem times out after 60 seconds. This mockup I made works perfectly however, and I can't see how the PG safe compartment is different. Here it is: my $mailer = new WeBWorK::Utils::RestrictedMailer( params => { from => 'firstname.lastname@example.com', smtp => 'mail.math.rochester.edu', headers => 'X-Remote-Host: 18.104.22.168', debug => "debug.txt", keepconnection => 1, subject => "generic subject", on_errors => 'die', }, lock_by_default => 1, allow_change => [qw/fake_from to fake_to cc fake_cc bcc/], allowed_recipients => [email@example.com firstname.lastname@example.com/], fatal_errors => 1, ); my $rmailer = new WeBWorK::Utils::RestrictedClosureClass($mailer, qw/Open SendEnc Close Cancel skipped_recipients error error_msg/); my $safe = new Safe; ${$safe->varglob('the_date')} = `date`; my $hole = new Safe::Hole {}; my $rmailer_wrapped = $hole->wrap($rmailer); ${$safe->varglob('TEST')}{rmailer} = $rmailer_wrapped; my $result = $safe->reval(<<'EOF'); my $rmailer = $TEST{rmailer}; my $open_result = $rmailer->Open({ to => 'email@example.com', #subject => "this is only a test", }); print "open_result=$open_result\n"; my $sendenc_result = $rmailer->SendEnc("Hello world, the time is " . $the_date); print "sendenc_result=$sendenc_result\n"; $rmailer->Close; EOF die "reval threw an exception: $@" if $@;
formatting, ordering
Add wrapped RestrictedMailer instance to PG envir.
wrapper for Mail::Sender that restricts the arguemnts that can be passed to various "dangerous" methods. It is designed for use with RestrictedClosureClass and Safe::Hole. NOTE THAT THIS CLASS DOESN'T PROVIDE SAFETY ON ITS OWN. READ THE COMMENTS FOR MORE INFO.
removed extra blank line
eliminate useless double-assignment (which could cause a later security issue if someone comments out the second assignment and not the first)
Moved the guts of this to pg/lib/Parser/Legacy/NumberWithUnits.pl, since most of the code is common. This is a shell that now only defines the FormulaWithUnits() function.
Abstracted the NumberWithUnits to a more general ObjectWithUnits and moved the FormulaWithUnits to this file as well, since most of the code is common. Although, strictly speaking, FormulaWithUnits is not legacy code, since the general object-with-units is here, it will be easier to maintain FormulaWithUnits here as well. When the Parser gets a real units class, all of this can be removed. Also fixed the unit lookup code to use the actual names from the Units library, so we can now be more accurate about determining the extent of the units, and can handle things like '5 kg m / s' now. In the case of ambiguous formulas with units, e.g., '5m kg' where m is a variable, use '5*m kg' or '(5m) kg'.
Make Units::fundamental_units and Units::known_units public hashes.
Fixed usage comments to do formulas rather than just numbers.
The Units.pm library only accepts one division within the units, and the Parser wasn't taking that into account, so students could enter m/s/s and still get credit even if the units were m/s. This have been fixed.
Provides a formula with units (as opposed to a number with units). This does introduce some ambiguity issues, since variable names could look like units in some cases. E.g., s + 5 m/s could look like (s + 5*m/s) rather than (s + 5) meters/second. The parser will take the largest string at the end of the answer that could be treated as units so s + 5m/s is (s+5) meters/second. The Units.pm library requries units to be separated by * or / and only one / is allowed, so s + 5m s is (s+5m) seconds not (s+5) m*s. Something like 5 m/s/s will generate an error (it shouold be written m/s*s or m/s^2), and 5 kg m/s should be written 5 kg*m/s. [If we made the hash of known units be public rather than private in Units, we could do a better job of this, and could treat kg m/s as kg*m/s for example.]
Fixed a problem where the TeX version included two copies of the units (one in TeX mode and one from the string() output).
Updated NumberWithUnits to use Parser::LEgacy::NumberWithUnits rather than having a separate implementation here. This will guarantee that it is consistent with num_cmp() and prevents unneeded duplication of code.
Didn't need to override the perl fields for the integer-only methods, since all the checking is done in the parser.
This file implements special power operators that check for special conditions (like no powers of 'e', or only integer powers). See the contents of the file for documentation.
Added ability to have additional information given when not enough test points can be generated for a function comparison. By default, this information is NOT shown (since it could give students additional information about what answer is expectd). Professors can request it by setting the 'showTestPointErrors' flag in the Context().
Allow overridden Parser classes to generate error messages that the student will see. (For formulas, error messages are trapped silently by the overridden == and will not be seen. This lets Parser objects force a message to be seen.)
Fixed error in wwassignment_gradeMethods which calculated whether a problem was correct based on whether the number of correct answers was greater than 0. This is inaccurate when an instructor marks a problem correct for everyone in a class. This action changes the status to 1 but does not change the "num_correct" parameter. The wwassignment_gradeMethods is updated to use "status" instead of "num-correct" in determining the grade for the gradeSimple procedure. The gradeDeductRetry method still needs modification.
SECURITY: tighter constraints on which macro files can be loaded without restriction. Previously, any file that *contained* the strings PG.pl, dangerousMacros.pl, or IO.pl would be loaded with an empty opmask.
make default feedback button name "Email instructor" for those who don't want to update global.conf.
typo fix
label proctor login_type with the user ID of the student
improvements to Authen logging: - add login_type field (normal, guest, proctor, proctor_grading) - add initial_login field to control when success loggin occurs - log password success/failure directly, but also log overall success or failure at end of verify() - add log_error field to for overall failure message - improve wording of some error messages
allow replacing feedback button with a link to an arbitrary URL.
complete the fix for the undefined problibs hash problem.
avoid error when the $courseFiles{problibs} hash is undefined. see: <http://webhost.math.rochester.edu/webworkdocs/discuss/msgReader$4261>
import parse_scoring_file routine (THIRD TIME'S THE CHARM)
import parse_scoring_file routine
accidental commit
import parse_scoring_file routine
Made str_cmp accept blank answers again. Fixes bug #1123. Note: if you use blank answers, the "n of the questions remain unanswered" message will tell you how many of the answers should be left blank. It is probably worth working out a method of having blank entries that are only marked correct when all the other answers are correct (this would take a special grader; I have this as part of the weighted grader, but it is not common knowledge).
Fixed problem with checking Matrices of dimension 1 x n. (Fixes bug 1122.)
add where_email_address_nonempty, remove commented-out code
remove some commented-out code
add methods that expose the "where" interface of NewSQL
standardize routines for reading scoring files, resolves bug #932.
remove commented-out non-apache2-compatible code
apache2 compatibility fixes
make full copy of param data for apache 2
make this work with Apache2 (i can't believe this wasn't caught earlier)
fix box() to actually do undef=>"" conversion (oops), simplify unbox().
use fetchrow_array rather than fetchrow_arrayref in get iterator
add where_user_id_like()
add where_user_id_like(), make box() more concise, formatting fixes.
construct from hashrefs and arrayrefs in addition to hashes and objects, add toArray method.
add schema accessor methods (ie $db->User), make gen_new more concise.
add "exists" methods, remove commented-out $where vars, fix usage of grok_versionID_from_vsetID_sql, make getUserSetVersions behave correctly.
needs "v" in make/grok_vsetID, move "+0" numeric cast into grok_versionID_from_vsetID_sql, add parens.
added where_versionedset_user_id_eq_set_id_eq_version_id_le
override _order_by to allow passthrough of literal SQL via scalar refs.
Make sure \cdot is only used for a numeric right-hand part (finishes fix of bug 1114).
Use \cdot when a number is followed by a numeric fraction. (Fixes bug 1114.)
This script is for use on the annoyingly-corrupted tmon.out files that Devel::DProf generates when Safe compartments are used. It escapes nonprintable characters and spurrious newlines.
change the way where_* subs are called, bugfixes.
move moodle session table access routines to Authen::Moodle.
Update to version 3.3g: * When the AMSsymbols extension is loaded, the \mathbb macro is now changed to use the blackboard bold characters that are in the msbm font. (In the past, this would occur when the msbm font is first loaded, but the change should be made right away, since a use of \mathbb should cause the msbm font to load if it isn't already.) * Fixed a bug introduced in version 3.3f that causes tex2math (when used with autoload) to cause MSIE/PC to stop processing display mathematics in some situations. * Fixed problem with \longmapsto that caused gaps between the characters that form the arrow. Also worked around a problem with Firefox that caused \mapsto to lose its vertical tick at the left-hand end of the arrow. * Fixed a problem with autoload where multiple calls to tex2math could cause tex2math to convert \$ to $ and then later try to interpret the $ as a start-of-math delimiter, even though it was previously escaped. * Reorganized the autoload plugin so that jsMath.Autoload.Run() no longer needs to be called. In the past, autoload would use tex2math to look for text that needs to be converted to SPAN and DIV tags of class "math", but would not convert them itself. Now that autoload has settings to control what tex2math functions will be performed, there is no need to put off the conversion, so autoload now does the tex2math conversion immediately. The jsMath.Autoload.findMathElements variable is no longer needed, and so has been depricated. * Fixed a problem with tex2math where two escaped dollars in a row would not be processed properly (the second would not be treated as escaped, and so could be treated as a start-of-math delimiter).
this schema module is used for both the password and permission tables.
fixed a problem where users with no groups or no groups in this course were excluded from listings. use _course_members_query() from Moodle.pm to get userids_subquery.
slightly nicer constructor
moved function that generates and SQL statment listing the userids in the current course, added a function that does the same for groupids.
slightly nicer constuctor
utility bind() method which fills in bind values
Fixed problem with function checking when vars are specified with limits and the vars are not in alphabetical order. (The Parser expects the limits and test points to have coordinates specified in alphabetical order, so they need to be reordered if the author has them in another order.)
completed NewSQL::Moodle::User module -- seems to work well
first crack at NewSQL-based Moodle::User module... kinda cool, really...
yet more where clause abstractions (annoying but necessary :P)
remove unused functions (left over from GDBM days)
remove unused reference to findDefaults
move creation of sql object into init_sql method (cf Merge.pm)
remove null implementations of n/a oldapi methods, random cleanup.
nice error messages for unimplemented API methods
Catch errors which get thrown by other filters.
Fixed problem where ShowPast Answers would incorrectly includes answers for students whose login name have the current student's login name as a suffix. (Fixes bug #1102)
mark set_merged and problem_merged as non-native
add set_merged and problem_merged "tables" to do in-database merging.
this is the log message for the last version (v1.80): sweeping changes! PLEASE NOTE THAT VERSION 1.80 AND LATER OF DB.PM WILL NOT WORK WITH MOODLE UNTIL I UPDATE THE MOODLE SCHEMA MODULES (which should happen soon). WARNING: VERY EXPERIMENTAL CHANGES. DO NOT USE ON PRODUCTION SITES. MAKE A BACKUP OF YOUR DATA BEFORE USING. replaced ad-hoc argument checking with calls to checkArgs and checkArgsRefList. this makes the code much more concise and readable. no longer checking for existence before adding a field -- instead catch a RecordExists exception which is thrown by NewSQL classes. this will speed inserts of slightly. added count* methods for all tables. switch to using newer NewSQL methods where they'll be more efficient or readable. generally regularize code -- resolve indentation problems, get rid of extraneous empty lines, etc. rewrote getMergedSets, getMergedProblems, and getAllMergedUserProblems to use NewSQL::Merged (via set_merged/problem_merged "tables"). The new merge method (which is done completely withtin the database) is more than three times as fast for normal merging and more than seven times as fast for getAllMergedUserProblems.
*** empty log message ***
lots o' fixes
FIELD_DATA() returns a reference to the field_data hash
add a transformation function that acts on fields, whether or not they're qualified with a table name.
pretty logging!
don't turn on tracing -- we're doing out own debugging in each schema module now :)
add RecordExists exception: schema modules should throw this exception if a conflicting record exists on insert.
explicitly turn PrintError off
newsql module for accessing "merged" records as if they existed in a table
newsql-based module for accessing standard webwork SQL tables
this file is now the base class for newsql-based schema modules
Fixed bad check for if the complex number is 1 (caused reduce to incorrectly remove the complex number when used in multiplication).
put user methods first (in same order as dblayout tables in database.conf)
remove spurrious use lines for Record classes
fixes to index structure. * the prefix lengths on keyfield indexes is now 255, the length of the field. * the index that contains all three keyfields is now a UNIQUE KEY * psvn is no longer the PRIMARY KEY, now a UNIQUE KEY (and it's the second UNIQUE KEY, after the user_id/set_id one) also, made wwdb_upgrade a little easier to maintain by not hardcoding version numbers into the @DB_VERSIONS structure.
alphanumeric keyfields TINYBLOB NOT NULL instead of BLOB for UNIQUE indexing. check for table existence before doing something with that table.
alphanumeric keyfields TINYBLOB NOT NULL instead of BLOB for UNIQUE indexing.
update sql_moodle to reference remaining routines in sql_single
use $db->rename_tables for course renaming, remove addCourseHelper, deleteCourseHelper, copyCourseDataHelper and associated infrastructure. still have to do something about archive/unarchive -- they are not only mysql specific, but they rely on the database being local, on the default port, and named "webwork". :P
table renaming support
propagate errors during module preload
remove reference to FileXfer
use $db->create_tables and $db->delete_tables, check for dblayout existence even if we're using the default dblayoutname, make regex and error message match for course id checking, removal of "sql" specific information from POD, formatting fixes, additional warnings about bad course existence checking code.
add create_tables and delete_tables methods
remove partially finished and sometimes incorrect POD :(
drop_table becomes delete_table (don't want to use SQL terminology exactly...). don't refer to $self->{record} or $self->{driver} in the main code, only in the helpers at the bottom. (this might help us with subclassing for moodle... maybe...)
add create_table and drop_table methods, small cleanups.
incorrectly set type of set_user.status column to INT; should be FLOAT. if you ran wwdb_upgrade after the last commit, you lost the decimal portions of any status values. thanks to gavin for noticing.
change key.timestamp type to BIGINT and problem_user.status type to INT.
Fixed problem where a zero with units would me marked as "not looking like anumber with units".
remove several useless "use Data::Dumper" lines
null-to-empty-string translation. this is necessary right now, but ultimately undesirable.
SQL::Abstract subclass that allows transformation of SQL identifiers. it overloads the _table and _quote methods to allow different transformation routines for table names and column names. the transformation routines themselves are specified by the new "transform_table" and "transform_field" parameters to the constructor that take coderefs. used by NewSQL to implement tableOverride and fieldOverride.
a new, much more flexible implementation. should be a drop-in replacement. please test.
set DBI trace level from dbLayout "debug" param. this can be a little chatty...
generate record class methods from a single field data table at compile time. generate real accessors/mutators rather than using an autoload. this should speed up record access significantly.
use a single username/password for connecting to the SQL database. this means that only one DBI handle is created instead of two, and the Driver's connect/disconnect methods are no-ops.
another false start :(
dymanically generate newRecord subroutines at compile time -- they're identical except for their names and the tables they access, so they might as well be generated. slightly more compile-time overhead, no-to-negligible impact on runtime speed.
tons of "DBFIXME" notes -- how to make database access more efficient
it was not a good idea to put a literal ASCII NUL in this file.
added small fixme note
Gateway update: be more aware of undefined fields for gateway parameters. I don't think this should be an issue, but saw a case where an "undefined value in subtraction" error was being returned; hopefully this will provide some level of protection against that.
Gateway update: report tests graded in the grace period after the due time as having been completed at exactly the maximum allowed time. Thus, if a test allows 20 min and there is a grace period (defined in global.conf) of 2 min, a test submitted after 21 min will be reported here as having been completed in 20 min, not 21. This avoids some confusion for instructors who aren't aware of the grace period. This update doesn't have any effect on the presentation of non- versioned sets.
Make ijk mode use the TeX definitions from the i, j and k constants as defined in the context, if they exist, otherwise fall back on the defaults.
Fix problem with formula comparisons involving vector-valued formulas. The coordinates for the vectors used in checking equality were plain Perl reals rather than Parser-based reals, and so the comparisons were being done using exact rather than fuzzy comparisons.
Make a more sophisticated unit check so that it will handle things like "3ft / s" (that don't have a space before the units). Really need to make a units class for the Parser.
Fixed unit checking so that units can include spaces (like 4 ft / min). Also fixed a problem where units were not being reported as part of the student's entered answer.
superceded by ProblemSetDetail.pm
replaced by FileManger.pm a while ago
parse a cvs commit log email and generate "cvs up" commands to merge the changes into the current working copy. (all this does is looks for the "diff" commands and pulls the filename and version numbers out of it.)
use before/after/between from Utils.pm
move before, after, and between subroutines here from Problem/GatewayQuiz
Changed button order to put "save" before "save as" as per Arnie's suggestion in http://webhost.math.rochester.edu/webworkdocs/discuss/msgReader$4100 This avoids "save" disappearing off the right-hand side when the browser windows isn't big enough to show it.
removed support module for deleted sql dblayout
move contents of CGIDeleteParams.pm to CGI.pm. This removes a level of indirection that's no longer necessary, and fixes importing.
no longer used -- see CGIDeleteParams
remove unused $db lexical
use /usr/bin/perl instead of /usr/local/bin/perl
didn't mean to commit that.
make importing actually work in runtime_use. previously, symbols were being imported into the bogus package "Main", and there was no way to specify an import list.
Had an error in the new CSS specification, which is fixed here.
Updates for version 3.3e: * Fixed a problem with how the cookie data is stored for the control panel (special characters were not being escaped, which causes difficulties with some browsers). * Fixed a bug where jsMath would not determine the em-size correctly in text blocks where the text-indent was set to a non-zero value. * Added some CSS styles to try to isolate the jsMath control panel from changes that might be caused by CSS settings from the main page. (Page authors who set styles that affect the jsMath panel may want to add additional CSS rules to reset those within #jsMath_panel in order to make the panel continue to look correct.) * Added \newline as an alternative to \cr and \\. * Added a new help file explaining the missing font messages and how to address them.
precompile many modules at server start time. this allows more compiled code (parse trees, bytecode, etc.) to be shared among child processes, and speeds child start time, since that compilation has already been done in the master process. you may want to turn this off for development, since it makes the server take a really long time to start.
indentation fixes: the outdenting of section headers was making this file really hard for me to read, so i indented them all.
allow empty last field to be present when reading classlist
Allow matrices to set their own templates (instead of using "c" for all columns), and handle missing open and close delimiters better.
Allow the _check subroutine to affect the {isConstant} field.
add more erorr checking, get settings from global.conf.
add ldap options
added missing ")" to log message
Fixed so this works with MSIE now.
parse "cvs status 2>&1" output and show changed/out-of-date files
get version from command line, don't upload to SF automatically
Second attempt to trap the stderr output of bsdtar.
Map Moodle groups to WeBWorK sections and recitations A section is a group that begins with the prefix SEC_ all other groups are recitations.
Use shell_qupte and readpipe to handle tar commands, and include stderr in the output so that we can report the correct number of files archived via bsdtar.
Add parenthesis around ijk vectors for string concatenation.
Gateway debug: correct code allowing multiple problems to be drawn from the same problem group. I think this is correct now (the original code I wrote was odd enough that it's not at all clear what I was thinking...).
Gateway update to Hardcopy: correct generation of hardcopies including student solutions to allow the correct answers to be shown before the due date if the student has used up all attempts on the set.
skip non-directories. prune empty directories in cvs update.
backport (sh002i): better defaults for problem library settings.
forward-port (sh002i): promote empty or missing statuses to the default status before importing
set default courses dir to /opt/webwork/courses, remove "oldProf" URL
Added ability to overrid TeX and perl versions by specifying a TeX or perl field in the variable definition. Also made vector-valued variables show up in bold.
filter out students without "include_in_email" behavior - bug #938.
fixed bug #1057 -- read_set_def was getting the wrong param passed to it.
backing out of accidental commit.
somehow this got lost
re-adding courses.dist to just HEAD and rel-2-3-dev branches (see below) i'm re-adding this directory using "cvs add" rather than by copying it from "courses" in the repository. this avoids having it show up in older release branches. the downside is that we lose the version history, but i don't think that's a big problem.
removing courses directory (please read) i originally moved the courses directory to courses.dist, to preserve file history, but this wasn't the right strategy, since it caused the courses directory to disappear from older branches as well. so i copied it back to courses, and then used "cvs remove" to delete its contents. so, it will hopefully exist in rel-2-2-dev and earlier releases, but not in rel-2-3-dev or HEAD.
webwork2 and pg dirs are in /opt/webwork by default now
disable test CG
replaced unicode literals with code points.
make logfile names more regular
remove incorrect "close(FILE)" -- left over from WW1 probably.
Corrected an error in update_instances that prevented the calendar from updating when the due date of webwork set was changed. (One brace was out of position.) You may still need to edit the Webwork link in moodle pointing to the problem with the newly changed date before the calendar will recognize the change.
Check routine can now return an array rather than an array reference. (This requires pg/lib/Value/AnswerCheckers.pm to be at least version 1.80).
Allow cmp_compare to return an array of answers, if requested (needed by parserMultiPart.pl).
Added local time zone to values which can be configured from within a course.
Changed addres of link for ClasslistFileFormat to point to the more complete descrition on the twiki
only recognize comments that start at the beginning of a line. this reduces the changes that a "#" in a field, will cause a real line to be truncated. (it's unlikely that the student ID will start with a "#".) yeah, i know the real solution is to use escaping. should-be-backported-to-rel-2-3-dev
Fixed problem where blank status in classlist.lst was not interpreted as enrolled. Squashes bug 1058
made the definition of $auxiliaryFilesExist more robust. This fixes bug 1056 and related bugs
this file hasn't been used in a long time
Gateway update of ProblemSetEditor; add problems_per_page verbiage. I think this is moot, given that (barring an interpretive error on my part) this file isn't being used, but hopefully it is at least now consistently moot rather than inconsistently so.
Gateway update of ProblemSetDetail: add some sensible defaults for gateway parameters, remove confusing labels.
Gateway update of problemsetlist; add problems_per_page fields, allow input via problemsPerPage = N in set.def files.
restrict PG access to ImageGenerator object using RestrictedClosureClass (prevents problem code from monkeying with paths, viewing passwords, calling methods other than add() and other bad stuff)
Added class to protect objects from evil prying problem code. Uses the closure-as-object technique to protect the self hash of the underlying object from problem code. All that the problem code sees is a blessed coderef. The coderef is a closure over the underlying object and the list of allowed methods. You can invoke the coderef directly, with the name of the method to invoke as the first argument, but the class also provides an AUTOLOAD routine that calls the coderef for you, so you can continue to use the class as usual.
Add License
Updated to version 3.3d (adds a plugin for use with pages that emply small fonts so that the substricts don't disappear; fixes a problem with heights being improperly computed in fallback modes; fixes several problems with Konqueror)
Initial version
Make links to the Problem Editor in the links menu at the left target the WW_Editor window, just like other "Edit it" links.
Make the target for the "Show Past Answers" window be WW_Info so that it is named in a similar way to the other windows used (WW_Editor, WW_View). This reduces possible classes with other sites using the more generic "information".
Fixed the problem I pointed out at MathFest where some errors were not being reported in the traditional num_cmp() function. (Things like 'x+3' in a numeric field would not be reported as an error and x would be treated as 0). This is due to a change in version 1.14 when Sam was normalizing the error reporting code; he didn't notice that warn had been rerouted to die in PG_answer_eval(). I have replaced it.
Added for LaTeXMathML mode.
Added LaTeXMathML mode.
Report the objec type better in parser error messages.
Fixed spelling errors in error messages.
Fixed a problem where Set objects could incorrectly complain about the parentheses (braces) used to declare the set.
Fixed a bug where substituting values into a Formula object would not be cleaned up properly (so later actions could incorrectly include the same substitution).
move bridge creation to mod.html -- that way, the bridge is created the first time someone asks to create a webwork set. this allows us to provide the create/administer ww course links right away. cleanup, formatting. the bridge creation is actually done in _wwassignment_ensureBridgeExists in lib.php. also, i hate php.
allow partial URLs in appletPath -- these get the server_root_url prepended to them.
applet path can now contain partial URLs, which will have the root URL of the local server prepended to them by findAppletCodebase.
make course title and institution optional
pass server_root_url into safe compartment.
use apache_root_url from course env. for absolute urls in system link
seed the course env. with hostname, port, ssl status, and root URL.
remove huge license headers
don't attempt to output db_version if it's undefined, don't double-space output quite so much.
don't check course if user says no. improved status messages. ignore non_native tables. allow conversions from TEXT->INT by first converting to VARCHAR(255)
don't need separate code for initilization -- we can just set db_version to 0 and run through all the upgrade steps normally. since there are no courses, only the global updates will run, which is fine.
make this compatible with wwdb_upgrade
use mysql depths table by default for images mode. assume that the depths table is in the main webwork database. removed a couple of extra blank lines.
newer version in conf/snippets/setHeader.pg
no need for warning about symlinks -- the symlinks are no longer included
this script uses a db_version value to run upgrade code to incrementally bring the database up-to-date with the current version of webwork. it can also detect and empty database and initialize it with any system (non-course) tables (like the depths table) and initilize an up-to-date db_version value.
check against "database version 0", the db structure during 2.2.x. this utility is designed to be used ONCE when upgrading from 2.2.x to 2.3.0, and then all future updates will be handled by wwdb_upgrade. at some point, i may reinstate the ability to check against the current version, but at this point it's not necessary.
append "1;" to these files, to satisfy Apache2.
remove "Fall 2003" from default set header
remove vestigal gdbm/global_user related stuff.
removed vestigal gdbm code
removed vestigal gdbm/sql options. fix how dblayout radio buttons are generated, so that the default layout or selected is selected correctly.
change how the html table rows are computed so that only visible fields are looked at. (pretty sure this works. could use some more testing though.)
remove mention of GDBM courses.
remove more instances of GDBM-related code
remove vestiges of GDBM database support
allow user to continue if an sql statement fails.
more experiments
add comments indicating that empty strings are stored as null in the DB. (this is left over from GDBM days, where there was no such thing as an undefined/null value. at some point, we will make a distinction, at which time it will become possible to override a value with an empty string.)
this goes along with WWDBv3 and should be removed as well
this didn't pan out -- i'm finally deleting it
remove this, since it doesn't solve the right problem.
remove CGIParamShim request hack, since CGIParamShim is not the solution
get rid of Apache2::compat line -- should no longer be needed
clean up webservice access, add my WeBWorK::RPC module,use PerlModule lines rather than eval "use ..."; die $@ if $@; also comment out $ENV{WEBWORK_ROOT} by default -- it's only necessary if webservice modules are being used
use port range 9000-9999 for apache2
add SSL directives
GatewayQuiz update: improve timer, update error messages when overtime, maybe some other minor changes I can't think of.
GatewayQuiz CSS update: minor change to try and address IE CSS display errors.
GatewayQuiz: update gateway.template to debug alert popups when problems are previewed or when switching between pages in a multi-page test, correct for IE CSS display bug.
GatewayQuiz template update: update for new timer. Still has some bugs in treatment low-time alerts for multipage tests and previews.
GatewayQuiz upate: revise style sheet for nicer timer.
GatewayQuiz update: revise timer to make display more elegant and robust.
GatewayQuiz Hardcopy update: add note about correctness of student answers when printing answers for GatewayQuizzes.
Added rungeKutta4 method to PGnumericalmacros.pl Updated documentation on rungeKutta4a, an answer filter in PGdiffeqmacros.pl
GatewayQuiz Hardcopy update: change random ordering of problems in Gateway tests to use PGrandom (avoids calling srand() repeatedly), add student answers to completed gateway tests when correct answers are shown. Also cleans up presentation of gateway tests.
GatewayQuiz update: use PGrandom to randomly order problems when that is called for (avoids using srand() repeatedly).
proof-of-concept RPC class that bootstraps itself the same way that WeBWorK.pm does. this way, we can code in the same idioms we're used to ($r, $r->ce, $r->db, etc.)
use IGNORE to throw away duplicate key errors when a config item already exists (i.e. from removal and subsequent reinstallation). this preserves existing values. another way to go would be to use REPLACE to overwrite existing values. this would ensure that at installation time, the defaults would be up-to-date.
refinements to ww course linking: * move statement about the name of the corresponding webwork course outside the table. * don't say "link to" in link text. * in link to webwork admin module, pre-select add course page, and pre-fill course ID, and db layout * clean up indentation slightly
only show import/export warning when those functions are selected.
allow for courses with no contact people in the admin course when deleting or archiving courses.
add /perl-status handler
GatewayQuiz ProblemSets update: omit hardcopy checkbox or radio button for gateway template sets, clean up checking for gateway sets.
GatewayQuiz Hardcopy update: preliminary commit to add checks for versioned sets to allow generation of hardcopies of versioned sets. Still needs checking to avoid generation of hardcopies for the template set.
GatewayQuiz update for multiple page tests; bug fix, adds better preview/ problem checking state retention when switching between pages.
GatewayQuiz preliminary commit adding multi-page test capability. This requires updating the database to add the problems_per_page record to the set tables of the database.
remove any symbol that begins with an underscore from the course env. this is to weed out the weird "_</path/to/database.conf" symbols that were getting through, but it also prevents the purposeful use of variables like "_some_internal_thing". which is not so bad.
use WeBWorK::Authen::class() to determine the proper Authen class to use. this is much nicer than embedding that decision in this file. twice.
add class($ce,$type) subroutine to determine correct authen module, docs
Changed some instances of wwmoodle to wwassignment
Allow matrices to be created from lists of vectors or points, or from formulas returning vectors or points.
Fixed a problem with derivatives of constant-valued Matrices (and vectors and points). They were incorrectly getting an extra level of nesting.
Extended the differentiation operator to handle multiple derivatives: $f->D("x","y") is the same as $f->D("x")->D("y") $f->D(2) is the same as $f->D->D $f->D(2,"x") is the same as $f->D("x")->D("x") and so on.
Extended this context to handle multivariable polynomials. So you can use things like loadMacros("contextLimitedPolynomial.pl"); Context("LimitedPolynomial")->variables->are(x => 'Real', y => 'Real'); Context()->flags->set(singlePowers=>1); $f = Formula("1 + x + y + 2xy + x^2 + y^2");
Updated to version 3.3c (mostly bugfixes in autoload, tex2math and CHMmode plugins). See the change log on the jsMath web site for complete details.
playing with request methods
Fixed CGI::radio call (replaced with CGI::radio_group Fixed name parameter in Options (replaced name by -name as required by CGI)
update package name
add WeBWorK::CGIDeleteParams option
update with more notes
this module deletes all parameters from any CGI object. the effect is to disable sticky parameters completely. this seems to solve the problems we've been having with parameter management under Apache2. see the tail end of the notes in CGIParamShim.pm for more details.
fixed syntax of call to radio_group -- leading dashes are required. the rule is (as defined by CGI::Util::rearrange): * if the first argument is a hashref, interpret its contents as named parameters. leading dashes can be used, but are not required. * otherwise, if the first parameter begins with a dash, interpret the argument string as named parameters. a leading dash is technically only required on the first item, but you'd be nuts to mix dash and no-dash. * otherwise, treat the argument list as non-named parameters.
temporarily enable /test/ url.
These two files can be used to render a .pg problem from the command line using the WebworkWebservice. They are designed to be used as Unix Filters with BBedit, but can be tweaked to work on any unix system and probably on windows as well. These can be useful when you are writing many problems and wish to use your favorite editor, and don't have direct access to the unix server. The _rawoutput version prints and HTML image of the raw XML data returned from the webservice. The other returns only the HTML page embedded in the XML data.
updated help files to conform to changes in the user interface for these two pages.
Fixed bug #1037 where the option of adding a blank problem to an empty set was not allowed.
This commit actually does contain escapeHTML ! There is still a problem (even with standard CGI. Entering 5"<input name="foo"> into a problem answer blank will produce extraneous HTML code. Not sure how dangerous this is, (I think not very -- all it does is louse up the output for that one viewer.) The quote is causing more trouble than the <
Added CGIParamShim as a choice
Added a rudimentary escapeHTML -- probably enough to keep from ruining HTML output -- not designed to untaint data.
Fixed behavior of checkbox_group
Formatting corrections (including adding some {}). Checbox_groups does not yet work correctly. Removed support for sql template in rename, (it's still present in delete).
Beef up the error reporting in CGIeasytags
Rolled back a change to hidden_fields subroutine. CGI::hidden(name=>foo, value=>bar) doesn't work with standard CGI. Using default instead of value doesn't work either. Not sure what is going on. Returned to using CGI::hidden(foo, bar) (sigh)
Added {} to a couple of CGI::Tr to force concatenation.
Another {} entry.
Make FUNCTION_CMP retain the professor's answer exactly as typed rather than use the parsed version's reconstructed string.
Tweaks to the radio_group block, plus some fiddling with the warning mechanism
experimental CGI subclass that defers to WeBWorK::Request for parameter handling.
Added {} to some HTML tags. For some reason they seem to have disappeared?
This version of WeBWorK::CGI calls one of the others: CGI or WeBWorK::CGIeasytags or (eventually) WeBWorK::CGIParamshim
front end for HTML::easytags that imitages CGI behavior for creating HTML tags. called from WeBWorK::CGI.pm
Added {} to force concatenation in some tables;
always store values as arrayrefs in paramcache
make reply_with_file work under Apache2
rolled back accidental commit of non-null AllowSubroutineOutput value. I'm getting kind of sick of Constants.pm -- do we need Constants.pm.dist? or should we replace this mechanism with PerlSetVar or something?
Removing obsolete files
Removing absolete files
load Apache2::Connection, move requires up to the top in a begin block.
dubious hack to support WeBWorK::CGIParamShim. This is not threadsafe, but then again, neither is Safe.pm, so it's a non-issue so far.
docuemntation fix -- htmlEscape doesn't use CGI::escapeHTML
Commiting formatting changes
Committing formatting changes to CGI calls Adding {} to calls that concatenate their inputs
Minor formatting changes in CGI calls. Mostly adding {} at the beginning of functions that concatenate their inputs.
Here is a stable? version of CGI.pm for the night. There are some minor bugs that need to be fixed in the newest version
Fixed a bug in tables
*** empty log message ***
Latest version of CGI this processes inputs first and is more regular
Considerably simplified the behavior of radio buttons and select lists. Let's try it now.
Replaced "values" by "value" in call to radio_group. Sorry about that. :-)
More changes to the select block of WeBWorK::CGI
Still working on getting the select lists to work correctly
Fix another glitch -- if not default value is specified select the first value
Fixed bug in applying labvels to values
Added handler for CGI::password_field
Fixed checkbox CGI glitch
Fixed a glitch in moving auxiliary files. There was an error when auxiliary files didn't need to be moved.
Made calls to CGI:: use named parameters so that WeBWorK::CGI handles them properly
support uploads under apache2
added missing "1;" at endo f file
Apache2: use reply_with_redirect rather than ad-hoc method.
Apache2: use reply_with_file rather than ad-hoc method.
Apache 2: replace header_out with headers_out, explicit returns for do_reply_with_*
replace header_in with headers_in (Apache 2)
use normal print function rather than $r->print, so that we don't have to load Apache2::RequestIO.
Changed from use CGI to use WeBWorK::CGI There is one part of the subrouting hidden_paramters in which I ensure that there is only one value for each name (replaced @vaules with $value
Converting from use CGI to use WeBWorK::CGI The only substantial change is in Hardcopy where set_id was changed to "sid" I believe that change is correct.
Mostly replace use CGI; with use WeBWorK::CGI Files with additional changes to CGI calls are SendMail, SetMaker PGProblemEditor Instructor::Index and FileManager
Latest version of WeBWorK::CGI. It can still use a good deal of abstraction but it appears to work with existing code. It's meant to be a CGI imitation for WeBWorK and it's coding style, not a complete duplicate. The speed seems acceptable but there are very obvious things that could be done to speed it up if needed.
This hack seems to work -- will revisit to regularize hidden inputs
Fixed some problems with hidden fields. Time to go back and regularize the processing. V: ----------------------------------------------------------------------
Changed submit button so that the name and label keys are explicitly entered.
Added end form statement
Fixed typo (should be keys not key)
Normalized call for submit button
Cleaned up some cases where all of the parameters are included in the initial hash.
Fixed some problems with textarea interpretation.
Allow textfield to be interpreted
don't call send_http_header under apache2
Allow th to have comma separated entries
One more glitch in radio buttons fixed.
Fixed some errors in radio buttons
Allow table to contain a list of rows (rather than a single one).
Added handlers for scrolling lists.
only call send_http_header under Apache1.
Apache2 compatibility for HTTP constants. (This may very well be broken, but I wanted to get it comitted before bed.)
Modifications so that license and documentation now apply to wwassignment rather wwmoodle (wwassignment is based on wwmoodle).
This will now handle at least some popup_menu commands (<select>)
Only remove scrollbars when used within the moodle frame (otherwise they are eroneously removed even when the full interface is used in WeBWorK).
This commits an experimental file to see if HTML generation can be accomplished using HTML::EasyTag as a basis. It is NOT ready for prime time. You can install this in a file by replacing use CGI; by use WeBWorK::CGI;
improve formatting for params debugging output.
We don't need this debug statement, and it causes errors when the course is entered from outside moodle
Added -override to checkbox for problems already added to this course. They were sticking when they should not have.
Finding local problems seems to work correctly now.
Changes that make it possible to browse this course and the set definition files. (I think I mislabeled the local_sets parameter to library_sets) There is still a problem with viewing local problems. A directory labeled set0 is interpreted as 0, which in this instance is not the right thing. This might not be a new problem.
Have placed -override=>1 in every CGI::hidden(). So far this seems to fix the problem with misleading sticky behavior. I have no clue why use CGI qw(-nosticky) didn't work for hidden. Possibly a bug. So far the fix continues to work for apache1.3 without changing the behavior. After further testing this file should have at least some of the annoying debug statements removed.
Added -override =>1 back in to some of the CGI::hidden() tags. Still won't remember which library it's looking at.
uncomment code
defeat cvs tag parsing
Try using the -nosticky pragma to see if this fixes the problem.
Fixed some of the param problems by adding , override=>1 to the CGI::hidden() calls. This means that CGI ignores any param() values when assigning value to the field. We have been assigning our own updated values in any case, so this is probably what should have been done from the start. I'm not 100% sure of this yet however, so I've only fixed a couple of places in SetMaker.pm where the behavior is weird. I'd like to here of other weird behavior that could be attributed to values in forms sticking or not sticking correctly.
fixed paths to config files
wwapache2ctl.dist should be in the repository, not wwapache2ctl
debug() output for untangling CGI/param problems (remove later)
use WeBWorK::Cookie
separate definitions for $warning_handler for Apache 1/2
don't load Apache::Log via global.conf anymore -- special-case it in WeBWorK::PG::Local instead. this allows for selective loading of Apache::Log for Apache1 or Apache2::Log and APR::Table for Apache2.
Added some new modules that are required. Two of them will only be required once Apache2 is in place.
Install wrapper for param() method when running under mod_perl2. This is necessary because Apache2::Request's param doesn't support adding parameters or modifying parameter values. This is a potentially SLOW workaround, because there's an extra level of perl code before we get to the XS param().
Progress on Apache2 compatibility -- doesn't work yet. I've gotten to the point where the login screen can be displayed, but login will still fail. The issue that i'm currently working on is that we modify $r->param values extensively in WeBWorK, and that is not supported in Apache2::Request. I'm not sure why, and no workaround is given. One solution is to wrap override param() in WeBWorK::Request, but this would slow things down since the Apache2::Request param method is written in C.
removed commented-out code that would have needed modification for apache2
WeBWorK::Cookie inherits from Apache::Cookie or Apache2::Cookie depending on the mod_perl version.
Fixed behavior of getProblemsForUser() Now fetches all rows satisfying query, not just the first one.
Removed update code since I doubt that it will help in converting from wwmoodle to wwassignment.
changed grade_method to gradingmethod in the wwassignment_grades() subroutine.
Changes for installing in utf8 directories
fixed changes in moodle table names and field names I'm trying to meet moodle coding standards in naming fields
disabled some unneeded modules, to reduce server restart time.
Fixed error deliberately introduced into input.txt
These scripts will step through the problemLibrary and check each problem to see if the create WARNING messages when run. The scripts are still a bit fragile -- use with caution. VS: ----------------------------------------------------------------------
Fixed bug which caused warnings in problems containing hints and/or solutions containing math (i.e., requiring images).
this CG has not been used for a long time
change order of use statements compulsively
eliminate sub redefine warnings
updating instructions
Completed (?) revising the names of the subroutines. The construction of the bridge between moodle and webwork courses now works fairly smoothly, but doesn't do much yet. The shortname of the moodle course must match exactly the name of the WeBWorK course. We still need to create an editor that will allow you to adjust this.?
Adding more files for wwassignment
Combining wwmoodle and wwmoodleset into one module called wwassign
change wwmoodle_set to wwmoodleset to conform to moodle coding guidelines
Replacing the mysql.sql schema which somehow got lost when creating the CVS repository
Updates to use moodle theme to simplify the WW GUI when used in moodle, and to resize the IFRAME to fit the size of its contents.
Add the moodle theme to the list of available themes.
A theme for use with moodle courses. It is used to remove portions of the WeBWorK GUI when the page appears in the IFRAME used by wwmoodleset.
The last message was garbled. I've added code that copies auxiliary files when you make a local copy or an extra copy of a problem file of the form prob4/prob4.pg This copy mechanism is not yet used when viewing one of these problems from a temporary file in tmpEdit. If you have viewed a problem before you start editing it, your browser will probably use cached images and you will not have any errors. If you start editing a problem with auxiliary files before viewing it once in its original state, then some of the auxiliary images might be missing.
and copy auxilliary files when making a copy of a problem. This does not do anything about the creation of temporary files for viewing. If you have already viewed the file before you start editing it youthen the temporary links will work. Make File::Copy available
Make File::Copy available
Fixed a couple more issues with blank problems. Allow files to be copied even when we can't write the original (this lets you make a copy of the blank problem or default headers). Attempt to overcome the copy/rename problem by making it not be a menu and instead use a checkbox that says whether the problem or header will replace the one in the current set. This makes it clear that a copy is still being made (not that the original is being renamed), but that the homework set is being altered. Those are really two different actions, and it seems to make sense to separate them. The default is still to link into the homework set, if there is one.
Changed messages that refer to 'Save as' to use 'Create a copy' instead (which is the current wording for that function). Problem: Since the default in that pop-up menu us "Rename file" rather than "Create a copy", it is not immediately clear what this message refers to. I still think "Create a copy" should be the default rather than "Rename file", since the latter only makes sense when you got to the editor from a file linked to a homework set, which is not always the case (e.g., when you use the Library Browser). It would also make these error messages refer to something visible rather than a menu item that is not showing.
Handle blank problems correctly (they were being flagged as unsafe in some cases, and produced as many as 3 error messages indicating that the file had to be "Saved as" before editing). Also fixed a typo with hardcopy header checking.
Allow viewing of the default header files (so they can be saved to local files).
Fixed some typos.
Changed some "Problem sets" to "Homework sets" and added an note when a file is already included in the target homework set.
Correctly handle viewing of edited files (we are passed relative paths, but the code used to treat them as absolute paths).
Use a better word order for these messages.
Make edit links use the WW_Editor window.
Restoring lang.php to wwmoodle-beta-4 original. (Somehow it had been erased.)
Updating icon for webwork sets
Alas, symlinks are not followed, hence you need to copy the help directory and language files to new locations.
Install instructions. These will need to be updated as this module evolves.
Added README explaining why wwmoodleset was created (so that it complies with Moodle module naming conventions). One substantial difference is that the database calls in wwmoodleset use ADODB (the global $db database connection supplied by moodle) rather than using a new database connection DB.pm (PEAR?). In my experience the latter connection used to access webwork databases was killing the global connection and calls to moodle databases were failing.
Prefaced some subroutines with _wwrpc instead of wwmoodleset. These subroutines are internal to wwmoodleset (as far as moodle is concerned) and should eventually be replaced by RPC calls to webwork.
merged in pre-CVS changes from Mike's wwmoodle tree
Make sure that the user list is restricted to the current course. cosmetic changes in Permission
renamed wwmoodle_set to wwmoodleset
belatedly adding moodle schema modules
Use tolerance flags from the Real object itself, if available, before looking at the context.
Fix some problems with the Diagonstics output for Formula objects. (The tolerances using in the diagnostics didn't always match the ones used in the actual testing, and the wrong values were sometimes displayed when a multi-variable function was displayed as a graph.)
New files to bring jsMath up to version 3.3b.
Updated to version 3.3b. See the change log on the jsMath web site for details of the changes. Some of the highlights are: Added an extension that implements the \font command. (Now that jsMath can auto-load fonts as they are needed, this is feasible to do.) Added \eqalign and \displaylines for creating multi-line displayed mathematics. Also added \eqalignno, but it works by putting the line numbers in a right-justified column separated by 3 em's of space from the rest of the alignment (rather than putting them flush right, which would be difficult without more substantial changes to jsMath). Finally, added \leqalignno, but the line numbers are placed on the right not the left (it is really just an alias for \eqalignno, and is included only for completeness). Added the ability to use \noalign{\vskip ...} and \\[dimen] to insert space within an array or alignment. This is not a complete implementation of \noalign; only \vskip and \vspace commands are processed, and this is only intended as a way of controlling the spacing between rows of a table. Adjusted the spacing within some alignments to better match actual TeX output. Added \mbox and \hbox to the commands that are processed correctly after ^ and _ (i.e., as unbraced superscripts and subscripts). JsMath's implementation of \raise and \lower are non-standard in that they do not require an \hbox, as TeX does; indeed using an \hbox would cause jsMath to fail (unless it were enclosed in braces). This is no longer the case, as these commands now handle \hbox and \mbox as TeX does. The addition of several new checkboxes on the jsMath control panel made the window for the control panel rather tall. This has required a reorganization of the control panel, and it now has a horizontal rather than a vertical orientation which better matches the aspect ratio of most screens. In addition, version 3.3 introduced an caching mechanism that is page-based, and "global mode" that allows for an inter-page cache. This mechanism works with WeBWorK, but because the pages are so short, it is probably not very helpful. Also, turning on global mode will require logging in again (due to the loss of form data when the page is reloaded).
A bare bones method for verifying against and LDAP (in this case the LDAP at the U of R) You will need to change the constants for use with another local LDAP. this is not at all finished -- in particular there is no check to see if the user is enrolled in a specific course.
Allow delete option after archiving course.
Added HTTP-Basic authenticator for WeBWorK: AuthenWeBWorK.pm - steals $ce/$authz/$db/$authen bootstrapping code from the dispatcher, overrides Authen's get_credentials method (and clobbers cookie methods and set_params) Debug.pm - load WeBWorK::Contsants explicitly in case it isn't already loaded Authen.pm - added maybe_kill_cookie shim (so that it can be overridden elsewhere) Configure as follows: <Location /some_protected_location> AuthName "My Protected Location" AuthType Basic PerlAuthenHandler Apache::AuthenWeBWorK PerlSetVar authen_webwork_root /path/to/webwork2 PerlSetVar authen_webwork_course some_course_id require valid-user </Location>
Fixed grade_problem so taht is uses the safe compartment. (This is important because the problem can supply its own grader, and that code shoudl be run in the safe compartment, just like the answer checkers are. Without this, graders could call PG_restricted_eval() and actually get access to the full WW environment rather than the safe compartment.)
Imported from beta 4
print log messages to debug output
Preliminary config files for Apache 2. These are enough to bootstrap WeBWorK under Apache 2. None of the WW code has been modified yet, so it of course barfs as soon as you visit /webwork2. However, the config problems are resolved and real porting can begin.
This utility automates updating config files from their corresponding .dist files. Run like this: bin/ww-update-config conf/global.conf You can specify either the conf file or its .dist file -- the other one will be deduced automatically. You can specify multiple files. This is useful: bin/ww-update-config bin/*.dist conf/*.dist
Implemented unarchiving function to complement archiving function. Archive exports the course database to courseName/DATA and then tas and gzips the directory courseName to courseDirectory/courseName.tar.gz Unarchive allows one to choose files of the type courseDirectory/courseName.tar.gz and then ungzip, untar them to courseDirectory/courseName -- the database record in courseName/DATA is then loaded into the webwork database. So far there is only minimal error checking about whether all or part of the course exists when unarchiving. There are not yet features for archiving and then deleting a course -- these two operations have to be done separately for now.
Fixed spelling typo in comment
Add contact person for a new course to the admin course as a student. Student's have no access to CourseAdmin features.
don't call formatDateTime unless the result is used (closes bug #830)
check for a valid moodle session when the webwork key matches an expired session. this allows for seamless re-login when the webwork timeout is shorter than the moodle timeout.
Make sure that WeBWorK::Constants has been loaded before this file is evaluated.
replace "SELECT *" with explicit list of fields to avoid problems when columns are ordered differently in the database. fixes bug #1033.
Fixed a problem where things like x+4x would be accepted even in single-power mode (the initial x was not being identified as a single power of x correctly).
script for generating release tarballs and uploading them to SF
fixed path to docs directory
Fixed bug for selecting problems from the ProblemLibrary database. Problems which have no associated textbook were mucking things up, even if no textbook was selected.
support SSL mode for devel.webwork.rochester.edu systems. uncomment the line "SSL=-DSSL" in bin/wwapachectl to enable. note that if you do this, only https requests will be serviced. you must be in the unix group wwdev (for access to the ssl crt and key)
Roll back unwanted change to wwsh
Scripts for cleaning up code in problems. (Written by Davide Cervone)
Set server root (-d) to $WEBWORKROOT, create "run" directory if necessary. (This is for devel's Apache/SSL, which wants to put an httpd.mm file in "$SERVERROOT/run".)
improvements to URL handling. * use use_abs_url option of systemLink to generate URLs, rather than hardcoding logic. * don't generate a full URL for the return to your work link. it isn't needed. * in the "This feedback message was automatically generated by the WeBWorK system at" message, give the URL to the webwork home module, rather than just the host and port.
added use_abs_url option to systemLink: If set to a true value, the scheme, host, and port are prepended to the URL. This is useful for links which must be usable on their own, such as those sent via email.
Corrected typ in spelling of moodle_table_prefix variable.
use correct $moodle_table_prefix variable from global.conf (was $moodle_prefix). include moodlekey table for now.
Added in applet support (applets are now searched for in specified directories.)
Added definition for $moodle_table_prefix. REmoved commented out moodlekey table
Replaced instance of fetch_moodle_cookie with fetch_moodle_session
almost totally works now * fixed passwork checking (call to md5_hex was wrong) * added debugging output * renamed fetch_moodle_cookie to fetch_moodle_session * commented out unused moodle_session_expired
add moodlekey methods (these should go away eventually, but the current implementation of Authen::Moodle needs them)
Support for finding applets in one of several locations.
Added support for searching for appletin anumber of places defined in $pg{directories}{appletPath} in global.conf
changed how activity is determined. previously, check_session was being called with updateTimestamp=1, which would cause all active sessions to be "touched" so as to prolong their validity. also, it's not really approriate to call check_session in this way to begin with. we already grabbed the key, and we know it matches, so we don't want to grab it again. so instead i just put the timestamp comparison directly into this file. see also UserList.pm 1.79.
Fixed a problem where a pick screen error was produced if a student entered a vector-valued formula rather than a constant vector when parallel answers are being checked and the student used the Preview button to submit the answer.
add charset=utf-8 to content type header
Added support for directories for housing applet files
Added onSubmit to form so that javaScript functions can be triggered by the submit button. check that this still works on windows MSIE
$formFields is needed by at least one grader (sequentialGrader) in order to function. Is there a better way?
added findAppletFile to dangerous macros. This is still not in its final form which should involve checking the url rather than the file location.
replace @DB_LAYOUT_ORDER and %DB_LAYOUT_DESCRIPTIONS with values from course environment. remove form fields for 'sql' and 'gdbm' layouts.
fixed typo in last commit.
add @dblayout_order and %dbLayout_descr (to replace constants in CourseAdmin.pm)
modifications necessary to support moodle tables: * respect non_native flag in dbLayout With these changes, courses with the sql_moodle dbLayout can be created, deleted, renamed, and archived using the WeBWorK course management tools.
modifications necessary to support moodle tables: * respect non_native flag in dbLayout * don't attempt to add users if user table is non_native * rather than checking for the string "sql_single" in renameCourse and archiveCourse, and erroring out otherwise, we check to see if there is a copyCourseDataHelper or archiveCourseHelper implementation (respectively). new getHelperRef subroutine helps with this. With these changes, courses with the sql_moodle dbLayout can be created, deleted, renamed, and archived using the WeBWorK course management tools.
added stub for sql_moodle. this just copies the subroutines from sql_single.pm.
add non_native=>1 param to moodle tables. CourseManagement.pm will ignore them.
use new config options for authentication modules (see global.conf).
fixed a variable name from previous change
check more config files (basically all the files with .dist versions are checked now)
load php4 module
add $moodle_* seed variables for database.conf add authentication module selector
add sql_moodle database layout
actually check in session key format changes: * session key is now 32 chars rather than 40, to make it a little more manageable in length * session key now only uses letters and numbers, rather than some special characters.
small changes to configuration: * session key is now 32 chars rather than 40, to make it a little more manageable in length * session key now only uses letters and numbers, rather than some special characters. * variables $database_dsn, $database_username, $database_password, and $database_debug are defined in global.conf before database.conf is loaded. this means that in the typical case, database.conf doesn't need to be modified at all. * changes to database.conf to support $database_dsn, $database_username, $database_password, and $database_debug variables. * changes to some comments in database.conf, and removal of SQL/GDBM stubs.
Fix jsMath output in the answer preview when the student answer conains < or > (make sure they don't look like tags).
check for 'dbupgrade' table and 'db_version' value within that table.
some progress
some improvements: * warn if dbLayoutName doesn't match for a course (this can be extended to to more sophisticated checking) * add a summary of tables that weren't checked because they weren't part of any course * -n flag == don't attempt to fix problems
a utility to check and repair the webwork SQL database. functionality so far: * check for table existence, add tables that don't exist * check for field existence, add fields that don't exist * check field types, change types of fields that have incorrect types still TODO: * check index structure with SHOW INDEXES FROM * add indexes that aren't present * display tables in webwork database that weren't part of any course * check for dbupgrade table, offer to add it
removed warn message used to debug changes.
Added an email link so that one can easily email student(s) after e.g. giving then an extension.
Fixed minor problem where a field might not be defined (in addition to being empty) == now we check for defined, then check for non-empty. -- Mike
Replaced the use of checkKey by check_session to conform to the new subroutines in Authen.pm
pass relative paths to Problem in sourceFilePath (see bug #1016)
accidentally used $self->ce rather than $self->r->ce in revert_handler
reverting to 1.40 -- accidental commit
SECURITY: prevent reading/saving files outside of templates directory.
Resolve bug #994 ("Try it" yields: sourceFilePath is unsafe!) SetMaker uses a relative path for sourceFilePath, which is nice, but which path_is_subdir didn't account for. Added thrid argument, $allow_relative, to that utility which causes $dir to be prepended to $path. Modified Problem.pm to trigger this behavior.
Use undefstr to convert undefined values to the string "###UNDEF###". If you think a value you're sending to debug() might be undefiend, send it as a separate item in the argument list rather than concatenating it or interpolating it into a string. For example, say: debug("now myVal=", $myVal, ", exiting"); If $myVal is undefined, you'll see: now myVal=###UNDEF###, exiting
Support for new Authen class: * Use new Authen::Proctor subclass for proctor verification rathern than old verifyProctor method of Authen.
Fix checkKeyFields to actually work with "versioned" user_id field in key records.
Beginnings of a Authen-subclass implementation of Moodle-cookie based authentication.
Support for new Authen class: * Use new Authen::Proctor subclass for proctor verification rathern than old verifyProctor method of Authen. * Remove unfinished code fragment introduced in 1.79. Harmless but annoying. * Change names of login module constants from AUTHEN_MODULE and PROCTOR_AUTHEN_MODULE to LOGIN_MODULE and PROCTOR_LOGIN_MODULE.
New subclassable architecture. Should function identically to old implementation (modulo bugs). verifyProctor has been replaced with an Authen::Proctor subclass, which overrides several methods and consists of about 30 real lines of code. Cool.
Fixed a bug that caused can error when a Complex1 object was passed to the answer checker (rather than a string that needs to be parsed).
Fixed getFlag so that it sodesn't accidentally create the {context} field of an object that doesn't already have one (Perl will create hashes that don't already exist if you reference them). This was causing problems with the ans_array processing
When a file is uploaded and there is an error opening the destination file, the error message now includes the system error report and the file is no longer printed (causing a WeBWorK error).
A change to the way lists are processed in AnswerChecker.pm in December (v1.75) requires that implicitList => 0 be added to the defaults for variable_cmp().
Updated jsMath to version 3.2 Changes include a number of bug fixes, some enhancements to the TeX emulation, new extensions for AMS symbols and \boldsymbol (though these require laoding additional fonts onto the server), and the elimination of the need for the blank.gif image for most browsers.
Fixed a problem were the no-font message wasn't being disabled properly (due to changes in the CSS names used by jsMath).
missed one line
Fixed Bug 988. Use sortByName instead of sort to sort the keys in the %answerHash
Clean up verifyProctor() in Authen.pm, improve proctor authorization logging.
Change check for zero from fuzzy check to strict check (when the problem used absolute tolerances, in particular, this can causebig problems).
Updated to v3.1e (fixes problem with incorrect URL's in MSIE, reported as bug #982.)
Update gateway template to clarify time warnings.
forward-port from rel-2-2-dev: (move [edit] link for Course/Set Info to top, resolving bug #978.)
forward-port from rel-2-2-dev: (Preserve gateway test display options in colum header links.)
Update to version 3.1d of jsMath (works around a bug in Firefox 220.127.116.11 on the PC that causes the browser to crash when jsMath is loaded).
forward-port from rel-2-2-dev: (security checks for sourceFilePath -- fixes bug #970. * Utils.pm: add path_is_subdir * Problem.pm: use path_is_subdir to check sourceFilePath fix logic on when to use sourceFilePath * ProblemSet.pm: use path_is_subdir to check sourceFilePath add permissions check around sourceFilePath handler * ProblemSets.pm: use path_is_subdir to check sourceFilePath * GatewayQuiz.pm: remove code to preserve editMode/sourceFilePath (not used))
forward-port from rel-2-2-dev: (change underscores to spaces in siblings list, add tooltop for overflowing siblings.)
forward-port from rel-2-2-dev: (provisionally cut off overflowing text and reduce font sizes in menus.)
set $main::VERSION to "2.x" -- nice generic value for CVS.
Modify putUserProblem call to allow for versioned sets.
forward-port from rel-2-2-dev: (disable editFileSuffix since it is not used and is dumb.)
forward-port from rel-2-2-dev: (Moved snippet of ContentGenerator.pm that checked to see if the "report bugs" link could be showed inside the clause that requires the authentication to have been verified.) Although it was not noted in the original commit message, this commit also removes trailing newlines from error reporting messages in Authz. I assume this is so that the file/lineno is appened by Perl.
forward-port from rel-2-2-dev: (removed grey box around problem text because MSIE is awful. This fixes the grey-box problem mentioned in bug #945.)
List students last name first
forward-port from rel-2-2-dev: (Use File::Path::mkpath to create the hardcopy directory. mkpath() functions like ``mkdir -p'' in that it will create multiple directory elements if needed. Closes bug #950. Use the standard File::Temp::tempdir function instead of makeTempDirectory() to create the actual working directory. Add spaces after the "[edit]" links when PG errors are reported.)
moved from webwork2/bin
When checking for division by zero, don't do fuzzy check.
Fix bug related to $mail{feedbackRecipients} being set in web configuration (reported on wwdevel. I don't think this has a bug number.
Updated to v3.1c (added \def and \newcommand macros, fixed several bugs).
forward-port from rel-2-2-dev: (add GD and Net::SMTP, used by PG, and remove silly test module.)
forward-port from rel-2-2-dev: (Updated modules/executables list, cleaned up output. Output now specifies that $PATH is being searched for executables, and lists the contents of $PATH. Same with @INC. It's a little easier to tell if a module/executable has not been found: The "found" lines are prefixed by some space, which makes the not found '**' prefix stand out. When a module fails to load, but it's not because it wasn't found, the error message is given.)
these files are no longer used
moving local utilities to admintools module
moving local utilities out of webwork2/bin
test commit with very very very very very very very very very very very very very very very very very long first line.
test commit with very very very very very very very very very very very very very very very very very long first line.
test commit with very very very very very very very very very very very very very very very very very long first line.
test commit with very very very very very very very very very very very very very very very very very long first line.
test commit with very very very very very very very very very very very very very very very very very very very very long first line. and here's the second line!
forward-port from rel-2-2-patches: (make addCourse, deleteCourse more robust. - pre-check permissions before trying to mkdir/rmtree - treat creation errors on directories other than the root as warnings - treat deletion errors on all directories as warnings - treat sql_single "drop table" errors as warnings - supress DBI's error reporting for command-line addcourse/delcourse)
forward-port from rel-2-2-dev: (update copyright date range -- 2000-2006. this is probably overkill, since there are some files that were created after 2000 and some files that were last modified before 2006.)
Forward port to HEAD (Prevent "unquoted dx may conflict with future usage" messages.)
forward-port from rel-2-2-dev: (remove extraneous instructor tools link)
forward-port from rel-2-2-dev: (removed bad characters)
forward-port from rel-2-2-dev: (re-add $courseDirs{DATA}, since it is still potentially useful.)
forward-port from rel-2-2-dev: (make webwork code output siblings div/h2 code, rather than template. this allows for the siblings box to be named according to its contents.)
from rel-2-2-dev: (make templates validate)
forward port: (fix width issues with info box. restrict width of info box to exactly 40% of the page width. we can't use "max-width" because MSIE doesn't support it. set "overflow:auto" to enable scroll bars when the content can't be wrapped to 40%. this is a little nicer than the contents running over the border of the box, but MSIE makes bad choices about how to size the box so as to avoid unnecessary scroll bars. (it sizes the element first and then adds scroll bars, so it adding a horizontal scroll makes the content area smaller than the content, necessitating a vertical scroll bar as well. pretty annoying.) Tested this in WinIE, Firefox, and Safari.)
forward-port: (use darker foreground colors instead of bright background color for message classes for now.)
forward-port: (update info() for new stylesheet.)
forward-port: (use info() from Login.pm)
forward-port: (Don't output DIV tag in info() unless there's something to display.)
forward-port (Don't output DIV tag in info() unless there's something to display.)
forward-port to HEAD (Fixed error in variable names that was breaking the code in HEAD. -gage)
Updated to version 3.1b, which fixes several bugs in the fallback modes, and a bug when <BR> tags appear within the mathematics (this will not affect WW users). See the jsMath website for the complete change long.
forward-port to HEAD (fixed accidental commit of local version)
forward-port to head (roll back part of change in version 1.58.)
forward-port to head (partial clean up rendering of the info box. it will now not show up unless it has content, and the headings will be rendered more nicely.)
*** empty log message ***
forward-port from rel-2-2-dev (add h2 sizing for InfoPanel)
forward-port from rel-2-2-dev (lots of formatting/indentation fixes, also fix issue with text decoration in masthead.)
Forward-port from rel-2-2-patches: housekeeping. added copyright notices. UTF-8 => utf-8. removed byte-order marker added by bbedit. removed commented-out elements.
Fixed problem with formula-valued matrices producing an error message incorrectly. (Was checking the wrong attribute of the entries.)
Fixed problem with variables that are multiplied with no space between them (e.g., "ax") that was introduced when I changed the pattern to allow multi-letter variable names. The solution is to first check against the defined names before checking for the more complete name pattern.
changed license and readme to have generic "2.x" version numbers and no specific readme test. (i may add some message about this being an unreleased development version or something at a later date.)
Merge with HEAD (removal of commented-out messages)
Merge to HEAD (remove DPVC comments).
Merge to HEAD (Don't scan templates/tmpEdit for pg files in the Library Browser).
Merge changes with HEAD (Re-target view and edit links to use the view and edit windows)
Updated to jsMath version 3.1. This fixes problems with Firefox, and includes several new features, including the ability to autoload extensions to jsMath on the fly. Perhaps most important is the fact that the main jsMath files have been compressed so that they will download twice as fast as before.
Using Mike's fix for bug #942, because it was nicer. Forward-ported from rel-2-2-dev revision 18.104.22.168 to HEAD.
Resolves bug #942, in which a missing permission level field causes a warning: This is in fact due to UserList assuming that $record{permission} is defined when it is allowed to be undefined (as per the format of classlist files). I added a case that sets is to $default_permission_level if it is not defined. FIXED in branch rel-2-2-dev revision 22.214.171.124. Forwarded-ported with no modifications to HEAD in this revision.
I've modified the renameCourse code to simply issue a warning when a course directory (other than the course root dir) is not movable. I've also added error checking for some of the more common reasons for directories to not be movable, so that the warning message is more informative. Resolves bug #943. Originally committed to branch rel-2-2-dev. Forward-ported without modification to HEAD.
Fixed the following bug: if you are importing multiple sets and (stupidly) include the line "the following file(s)" in your multiple selection (which can happen if you are trying to get everything), then you would get a cryptic error and nothing would be imported.
Merging changes from rel-2-2-dev into HEAD
Changes to respond to bug report #936
PG Problem Editor Help Page
PG problem editor help
This fixes the bug specifically reported in bug report #935. There are still problems with saving local copies of set headers.
Gateway bugfix: correct (or work around) missing score/values.
Gateway update: don't display gateway sets in siblings sidebar of ProblemSet list for all users, regardless of permissions. This may or may not be the desired behavior. I like it because it forces the user to go to a test from the ProblemSets page where we rewrite the link with the more intuitive (but longer) text "Take new [test name] test".
Added ability to supply a code reference (rather than a Value object) for the typeMatch and extra fields for the List answer checker (and the String answer checker). This makes these more useful in overriding the match for specific problems that want better error messages, for example.
Avoid error when a CODE reference is checked to see if it is a Value object.
Added ability to specify variables that are part of the union/list rather than requiring just constants. E.g., interval_cmp("(1,a),(2a-1,a)",unions=>'no',var=>'a'); or interval_cmp("(x,y),(2x,3y)",unions=>'no',vars=>['x','y']);
Added a new flag that controls how a list with a single entry that is a list is handled. In the past, the student could not specify such an item, but now the default is to form a list with a single entry that is a list, provided the student has used parens explicitly around his list. So "1,2" will be a list with two items and "(1,2)" will be a list with one item (a list). This improves the ability to use the list checker for lists of arbitrary pairs (like "(1,max)") especially when you want to check for lists of these (e.g., "(1,max),(2,min)"), since otherwise a single pair "(1,max)" entered by the student would become the list "1,max" rather than the list containing the single pair. If you really want "(1,max)" to become the list "1,max", use List("1,max")->cmp(implicitList=>0); to prevent single lists from forming a list of a single item.
Now that the Parser allows multi-letter variable names, there is no need to handle C0 specially.
Now that the parser accepts multi-character variables, there is no need for the special treatment of dx. Also, allow the context to specify the default variable to use, and if not available, take the LAST varaible alphabetically, not the first. (x is more likely to be last, and the author might have added dx as a variable so that it will not cause an error if used in other answers in the problem, for example.)
Allow multi-letter variable names and names like x1, x2, etc.
Put the phrase "Click the icon for page and item specific help" at the top since in most cases this is what people will want. If it's not there people may give up before they get to it at the bottom of the page. Also delete "(if it is available)" since it gives no useful information. Arnie
No longer needed.
Fixed error in POST url which caused user and key to become multiply defined. This may also cure some other anomolies such as the can't call method "psvn" without a package or object error because that error sometimes included a reference to the key. ??? Not sure about this part, but it definitely causes the multiple user and key definition.
three more help files
Fixed theme item in the Constants.pm file.
Added popuplist widget to Config.pm. Modified Constants.pm to allow choice of theme from a pop up menu.
Turn off debugging. Allow the theme to be edited for each course. (This is slightly dangerous since a misspelling of the theme could cause troubles.) It would be helpful to have a pop-up menu widget for Config.pm -- similar to the boolean or permission pop ups, but where the values can be specified.
Modifications which replace SetsAssignedToUsers.pm by UserDetail.pm Added instructor help link to the links in the left margin. There is no specific student help link. Added some more configuration variables to Constants.pm
This file replaces the SetsAssignedToUser.pm module. It allows you to change the dates on several homework sets for a single student from one page. This is a common activity, particularly when adding students, and is now a much faster procedure.
The major change is to replace Sets assigned to user by UserDetail.pm. (Originally written by Rob Van Dam and completed by Mike Gage.) It has undergone a significant amount of testing, but has not yet been used in a course. We can back out of these changes before creating a release if problems are found.
Improvements to the help displayed for each page.
Gateway update: correct handling of gateway data input from def file.
Gateway update: correct handling of gateway data when editing sets.
Gateway update: fix typo.
Gateway update: revise display of versioned and non-versioned sets. Now all regular sets are sorted to the top of the list, with gateway tests at the bottom. Use view_proctored_tests parameter to decide if proctored tests should be hidden. Now uses new listUserSets and listUserSetVersions routines from DB.
Gateway update: reflect use of listUserSets to list non-versioned sets
Gateway update: use listUserSets and listUserSetVersions to show grades for all sets.
Gateway update: - correct error check in deleteUserSet to allow deletion of set versions - change countUserSets to only count non-versioned sets - add countUserSetVersions to count versioned sets - change listUserSets to not list versioned sets - add listUserSetVersions to list versioned sets These should resolve bug #894.
Gateway update: restore runtimer() to gateway.template (though for some reason it no longer likes the onload() handler in the body tag?). add nocache headers to try and avoid pernicious use of the back button. correct javascript timer to avoid negative times.
Gateway update: change $gatewayGracePeriod
i've been playing with a docbook version of the installation manual. converting the twiki installation manual is too time-consuming for it to be ready for 2.1.4, so this can just sit here until 2.1.5 or later.
Fixed some problems with alignment in Firefox 1.5 (will be part of 3.1 release, but that is being held up for the moment).
Gateway update: deal with missing problem groups in gateway tests slightly more gracefully.
Gateway update: fix a number of quiet bugs - deal with sets having no problems - add grace period read from conf file when determining test time expiration - retain consistent current time throughout processing - improved messages for tests running over time - add score and time messages to finished sets - save version_last_attempt_time for submitted sets that run over time
Gateway update: add a gateway.css style file for gateway styles
Gateway update: add gateway.css stylesheet to gateway template
Gateway update: add view_proctored_tests permission level and gateway_grace_period parameter to global.conf. view_proctored_tests will be used to determine if proctored tests by default appear in a students' problem_set_list. gateway_grace_period is the time after the actual time limit for the set that we will still grade it.
don't need this anymore
make links() work better with new template, emit "courses" link even when not logged in.
make siblings() work better with new template
removed cruft
graceful failure if needed data is not supplied
create $authz and $authen regardless of whether we have a courseID
use new theme/template arrangment
instead of a template hash, we give the default theme name and default template name.
moved template files into theme directories
added math-based template hack on it and figure out how it sucks.
get rid of submiterror escape
get rid of submitError usage
change it back
test fix of copyright symbol
the left half of the logo from http://webwork.rochester.edu
don't write globalUserID to course.conf file.
disable gdbm and sql database layouts, remove unneeded config options. this is the first step in removing support for these deprecated database layouts.
remove global_user from classlists (gdbm is dead)
Added more permission levels for the course configuration module.
Updated to version 3.0 of jsMath (see the jsMath web site for details of the changes in this version). Also updated the jsMath-ww.js bootstrap code to use the window onLoad handler to do one call to jsMath at the end rather than lots of calls for pages that show multiple problems (like the library browser).
Changed the permission setting for whether or not hardcopy can show correct answers before the answer date. The old value was really for the "Show Past Answers" button, not for being able to see correct answers early.
No longer used by jsMath.
accept display of edited problems even if they are from a gateway test, but only if we have permission. fixed bug #868.
refactored copy-and-pasted code
Really fix fun_cmp equivalence warning message. We show the equivalence message when: we're not in preview mode AND the answers are equivalent AND the answers are not identical. We DON'T CARE whether the answers are correct or not, because that leaks information in multipart questions when $showPartialCorrectAnswers is off. Both the Parser-version (FUNCTION_CMP) and the non-Parser-version (ORIGINAL_FUNCTION_CMP) behave as descibed above now. And this time we test *before* we commit...
Removed unneeded spacing. The spacing problem has been fixed by aligning the login status information to the right. That's a better fix than the non-breaking spaces.
parser version was ok, bug #752 fixed in non-parser version.
Removed a link for creating a blank problem that is not yet fully supported. Commented out cheerful green goodmessages announcing which subroutine handler of the PGProblemEditor was being executed. They seem to have fulfilled their role and are no longer needed. :-) -- Mike
remove dummy checkboxes for the time being, sort of closing bug #805.
use Parser-based num_cmp and fun_cmp by default.
give answer is equivalent message regardless of correctness. fixes bug #752.
push loginstatus over to the right
added some notes at the bottom.
fixed divide-by-zero error when calculating index.
Put a little space between the bread crumb path and the login status information.
note the "force renumber" is always enabled when problems are being reordered.
Allow reordering to succeed even if some UserProblems are missing. Addresses bug #878. By the way, I found the reordering code really hard to read, so I added a lot of comments and replaced multidimensional array accesses with a shorter form. ($sortme[$j][0] rather than $sortme[$j]->[0].) I'd like to maybe rewrite this code sometime to eliminate some indirection and make things clearer. There are two substantive changes: (1) When a UserProblem has to get reordered, we only reorder it if a UserProblem record actually exists. If it doesn't exist, we figure out where it would have moved to, and delete that problem instead. (2) When moving a UserProblem, the target location either contains or doesn't contain a record. Previously, the code checked whether a GlobalProblem existed in this location, assuming that if a global problem existed the corresponding UserProblem would as well. Now, it checks whether a UserProblem exists, which allows for missing UserProblem records. Lingering questions: (1) When multiple problems are assigned the same number, this results in the last one ending up first in the new ordering. I think it would be more natural for the first one to end up first. This would be an easy fix. (2) $force always gets set if reordering needs to be done, so we aren't able to delete a problem, reorder some other problems, and end up with a hole where where the deleted problem was. We can either fix this by mentioning this next to the force checkbox, or change it so that particular holes (i.e. those left by deleted problems) are allowed when reordering.
quick hack to prevent path text and loginstatus text from overlapping.
Prevent error message when num_cmp specifies the same string more than once (e.g., upper and lower case versions of the same thing).
remove specific login error mesasges -- log to login.log instead. some messages leaked information. (i.e. "user not found" versus "incorrect password".)
fixed warnings in &nav and &options when set is not asssigned.
removed useless debugging statement
Allow the admin course to be hidden by the hide_directort technique
add permission for viewing problem debugging info.
comment cleanup -- ignore
added proper phrase quoting to rfc822_mailbox -- fixes bug #875.
Corrected error message when mailing to an address is not allowed. This used to refer to the courseWeBWorK.ph file, which is WW1-specific. It now mentions global.conf and course.conf.
Fixed typo in instructor links for problem.
Modifying messages given when editing set detail. Also changed the way blank problems are handled in editor. You can save as or save a copy as
Modifying messages given when editing set detail.
1-liner adding course hiding support. place a file named "hidden_directory" in a course directory and it will not show up in the courses list on the WeBWorK home page. it will still appear in the CourseAdmin module. The file can be added/removed via UNIX access or by using the FileManager module.
This fixes bug #919 -- the "update user-sets" line remained commented out. I'm amazed this bug lasted as long as it did before it caused trouble. -- Mike
*** empty log message ***
*** empty log message ***
*** empty log message ***
Fixed a problem with not including parentheses when a negative number is the base of a power. (And in general, when a negative is used as an operand of a higher-precendence operation, but it really only affected powers.)
Add underscores to the anonymous unique identifier for questionnaires in WW 2 by using ${setNumber}_${courseName}_$psvnNumber
reinstated "report bugs" item in links()
Modifications that set problems with path .../Library/setFoo/problemBar to reference the "Library" component in bugzilla. Also the problemSeed is added to the url sent to bugzilla e.g. /webwork/shared-courses/gage_course_single_sql/templates/rochesterLibrary/setMAAtutorial/simplemultiplechoiceexample.pg_with_problemSeed=4655 this means that you can't click on the link, but it automatically includes a seed which might be helpful. It is not guaranteed that this the seed that caused problems -- that depends on how the bug is submitted -- but it is often the case that this seed caused the problem. -- Mike
fixed a couple of bugs in the previous commit: * links() preserves displayMode/showOldAnswers properly (bug #896) * loginstatus() fixes formatting * ur.template fixes a typo
reorganization and small changes for recent modifications to links(). split into two parts: * ur.template classes: These classes appear in ur.template and are NOT emitted by WeBWorK code. They need only appear in this template. * WeBWorK classes: These classes are emitted by WeBWorK code and should appear in ANY WeBWorK template. moved "minimal list style" to "div.Links ul" and "div.Links ul ul". div.Links is a ur.template class, and the proper place for styling the link menu lists is in ur.template. Consequently, any UL in a Links div gets styled this way, not just ULs of class LinksMenu. (In fact, class LinksMenu no longer exists.)
changes to links subroutine: * sublists are now within list items, as required by html spec * use &makeLinks helper to generate links (makes the code easier to read) * hilite the "active" link item with a strong tag and the "active" class * change the way displayMode and showOldAnswers are preserved, and preserve them in all the links. (see comments in code) changes to help subroutine: * add alt-text for help icon (" ? ") to conform to html spec As of now, all the code generated by template functions in this file is XHTML 1.0 Transitional compliant. The same cannot be said for the code generated by other content generators or PG.
change "die" to "croak" in a couple of places to make error messages more useful.
don't check "if loggedin" before calling loginstatus. loginstatus now says "not logged in" when the user is not logged in.
fix doctype, remove duplicate "message" escape.
don't need this any more -- wwsh now uses the perl debugger instead.
use the perl debugger for a shell instead of PSH. this gets us a readline (or readline-like?) editing environment, which is much nicer to work with.
utility script to create tarballs of problem libraries.
Fixed a problem with formatStudentAnswer not being defined in the special context created for this answer checker.
give the style used for the attempt results summary a structural name (attemptResultsSummary) rather than a sort-of-stylistic name (emphasis).
Use optionsMacro for options like we do in Problem.pm. This reduces the amount of (but doesn't eliminate) duplicated code between Problem and GatewayQuiz.
Make notification message more explicit.
Handle the new global.conf setting for jsMath's processDoubleClicks option.
Updated jsMath to version 2.4a. This fixes a number of alignment problems. Most of these are for math in tables, and baseline alignment issues in MSIE. A new feature is the ability to double-click on a mathematical expression on get a small window witht eh TeX source code for the expression. This can be disabled by setting $pg{displayModeOptions}{jsMath}{processDoubleClicks} = 0; in gloabl.conf. [jsMath v2.4a also includes a number of new features for the tex2math plugin, but this is not used by WeBWorK, so they will not be listed here. See the jsMath home page for more details.]
Give better error messages when the entries in Points, Vectors and Matrices are not of the right type.
Adjusted the parentheses slightly so that matrices will only be formed in Matrix context, not Point or Vector context (this produced confusing messages for students in some circumstances where they didn't balence their parentheses correctly).
also get rid of fixed height for siblings list :-P
back out of overflow:auto feature since it makes mozilla unhappy sometimes.
Roll back my changes. Use Davide's method of detecting the preview Button
Check to see if $inputs_ref->{previewAnswers} is defined. If it is then the preview button has been pressed. In this case emit a warning if the answer has been given previously regardless of whether the answer is correct or incorrect. The warning message indicates that the previous matching answer might have been either a preview or a submitted answer. Let's see how this works.
Take care of the issue where Preview could be used to gather information about whether an answer is correct by using the "this answer is the same as the previous one" message. Now if Preview is used, the warning is given whether the answer is right or not. (Maybe it is not necessary to check for correct at all, since that was there to prevent the message from being issued when there are multiple answer blanks and the student is working on other ones. But the exact match check will take care of those. Should the message be issued if the student changes a correct answer to an equivalent one?)
Updated a comment to make it more accurate.
Make had the right idea, but used the wrong context (or what might be the wrong context in some circumstances).
Roll back Mike's change, since this can cause unwanted error messages in list comparisons and other situations where the equality check could compare different types of objects (for example) or where the comparison could legitimately fail. We only want to report errors here when the user-supplied checker code fails. This change would cause errors to be reported, for example, when the user (incorrectly) entered a vector one time and then a formula (correctly) the next time. When the previous answer is checked against the current one, this change would report an error rather than silently ignoring the error, as it should.
Changes to code checking whether the previous answer is equivalent to the current answer. In this module additional code was answer to check for errors in the overloaded == in case the two Values can't be compared. In PGanswermacros.pl the filter which handles "parse_previous_answer" was modified to make sure the context is the same in the previous answer and the current answer.
Changes to code checking whether the previous answer is equivalent to the current answer. In this module additional code was answer to check for errors in the overloaded == in case the two Values can't be compared. In PGanswermacros.pl the filter which handles "parse_previous_answer" was modified to make sure the context is the same in the previous answer and the current answer.
Create the [HTML_TMP]/hardcopy directory if it doesn't exist. This is something of a hack done in Hardcopy.pm at the moment. I think this should be moved over to makeTempDirectory in Utils, but that would require more checking than I can do right at the moment. -- Mike
this commit fixes quite possible the stupidest thing i've ever done. wondering where messages like this $GlobalSets[1] (ID Sec9.2ParametricEq) not defined -- skipping at /ww/webwork/webwork2/lib/WeBWorK/ContentGenerator/Hardcopy.pm line 286. were coming from? the answer is: $GlobalSets[1] = undef; which is a line i put in there for testing and never removed. i am very sorry. :-(
fix error message for undefined global sets to print array index instead of "$i".
don't override loginstatus/links (they can handle not being logged in now). also, stop using CGI::Pretty.
don't override loginstatus/links (they can handle not being logged in now)
clear Authen.pm's verify cache upon logout, don't overload if_loggedin() or links() anymore.
allow links() and loginstatus() to operate properly even if no user is logged in. uses new method was_verified() in Authen.pm. also, stop using CGI::Pretty, for speed and download size.
stop using CGI::Pretty, for speed and output size.
store authenticator in $r.
add slot for WeBWorK::Authen object. we can use it for checking login status.
add caching of verify() result, reorganize file, add docs.
updated "test" template for debugging. all current template escapes are now represented, and their output is surrounded by visible DIVs. much more useful now. ;)
slight tweak to stylesheet to correct placement of loginstatus message regardless of whether it uses a <DIV> or a <SPAN>.
fixed code to filter out undefined sets, improved error reporting when that happens.
removed unmaintained templates
Added rudimentary link to report problems directly. It does this by constructing a link to the bugzilla CGI that includes information on the file name of the problem and the library in which the problem is stored. This is probably still pretty fragile. A separate module could be constructed to more intelligently report bugs. -- Mike
Create an anonymous unique identifier for questionnaires in WW 2 by using $setNumber$courseName$psvnNumber in place of $psvnNumber.
cleaned up error reporting for status methods. if arguments are not defined and non-empty, a warning is given (using "carp") and an undefined value is returned.
possible fix for problem when status_abbrev_has_behavior is used with an abbrev that doesn't map to any status.
more debugging
made code for filtering guest users a little more clear.
changed erorrs to warnings for the time being.
only check status behaviors for guest users that have a defined status. apparently, status can still sometimes be empty.
added error checking to ensure that arguments to status lookup methods are defined.
Fixed bug #870 so that setHeaders can be viewed and edited.
Updated to jsMath v2.3b. See the jsMath website for the change log for this version.
Fixed an error where files of type 'source_path_for_problem_file' were not redirected in the save_handler
A new parser object that handles popup menus. Mainly this is so that you can use them with the MultiPart object, which requires all the objects to be Value objects. See the comments in the file for documentation and examples.
Corrected misspelling
rearrange addition, deletion, change-saving, and "mark correct" code. Order is now: - save changes to existing problems - mark specified problems correct - delete specified problems - add blank problem This ensures consistencey if multiple operations are performed at once, and also prevents the values set in the new problem from being overwritten with empty values when changes to existing problems are saved.
Changed wording on link.
Improved handling of case where a blank_problem is asked for in PGProblemEditor.pm Also improved the random names for new local problems Added ability to create a new blank problem in ProblemSetDetail.pm (without going to the PGProblemEditor.pm) however something is not yet working when this problem record is saved. Sam -- could you look at lines near 679 to see what the problem is? There is a FIXME note there. I suspect that the addProblemToSet routine is failing somehow, but there is no error message. Many of the record fields are not filled out -- including the sourceFile path and the number of attempts. The same snippet of code works fine in PGProblemEditor.pm --Mike
Refactored much of the action in PGProblemEditor.pm This allows a user inteface which mimics the interface for the Hmwk sets editor and for the Classlist editor. It also allows all of the temporary edit files to be placed in one location. This allows one to "temporarily" edit a library file to try to see what is wrong with it. It is also now much easier to make a local copy of a library file for your current problem set so that you can tweak it. It has been fairly well tested by one person (me) but there may still be bugs. -- Mike
Added support for a directory for temporary edit files default: templates/tmpEdit
In the past, when Value objects were inserted into strings, they would automatically include parentheses so that if you had $f equal to 1+x and $g equal to 1-x, then Formula("$f/$g") would mean (1+x)/(1-x) rather than 1+(x/1)-x, which is what would happen as a straing string substitution. The problem is that this would also happen for real numbers, vectors, and everything else, even when it wasn't necessary. So if $x=Real(3), then "Let x = $x" would be "Let x = (3)". I have changed the behavior of the string concatenation for Value objects so that parentheses are only added in a few cases: for Formulas, Complex numbers, and Unions. This makes the other Value objects work more like regular variables in strings, but might cause some problems with strings that are used as formulas. For example, if $a = Real(-3), then "x + 2 $a" will become "x + 2 -3", or "x-1" rather than the expected "x - 6". (The old approach would have made it "x + 2 (-3)" which would have worked properly). For the most part, it is easier to use something like "x + 2*$a" or even "x" + 2*$a in this case, so the extra trouble of having to avoid parentheses when you really meant to substitute the value into a string didn't seem worth it.
Added a new experimental diagonstic function for the function answer checker. When enabled, it will produce graphs of the correct answer, the student answer, and the absolute and relative errors, and will list the data points used in the comparison, plus the numerical values of the results and errors. To enable the diagnostic, use ANS(fun_cmp($f,diagnostics=>1)); Note that only single-variable functions can be graphed at the moment, so if you are using a multi-variable check, you need to disable the graphing. To do this use ANS(fun_cmp($f,vars=>['x','y'],diagnostics=>[showGraphs=>0])); The diagnostic mode is only available for the Parser-based versions of the function checker, and (of course) with the native Parser objects as well: ANS(Formula($f)->cmp(diagnostics=>1)); There are now Context settings to control the diagnostics, which can be set through Context()->diagnostics->set(). For example Context()->diagnostics->set(formulas=>{showGraphs=>0}); would turn off graphs for all functions comparisons. Some of the other values you can set are: formulas => { showTestPoints => 1, # show the test points and function values showRelativeErrors => 1, # show the relative errors for the student answer showAbsoluteErrors => 1, # show the absolute errors for the student answer showGraphs => 1, # show the various graphs graphRelativeErrors => 1, # show the relative error graph graphAbsoluteErrors => 1, # show the absolute error graph clipRelativeError => 5, # don't show relative errors above 5 clipAbsoluteError => 5, # don't show absolute errors above 5 plotTestPoints => 1, # include dots at the test points combineGraphs => 1, # show correct and student graphs in one image }, graphs => { divisions => 75, # the number of data points to plot limits => [-2,2], # the lower and upper limit of the plot # (taken from the function limits if not provided) size => 250, # pixel size of the image (could be [width,height]) grid => [10,10], # number of grid lines in each direction axes => [0,0], # where to put axes relative to origin } Any of these can be set in the Context(), or in the answer checker itself. If you set diagnostics to an array reference, the entries in the array refer to element of the formulas hash. If you set diagonstics to a hash reference, then you can set values in either the formulas or graphs hashes, as in: ANS(Formula($f)->cmp(diagnostics=>{ formulas => {showAbsoluteErrors=>0}, graphs => {size=>300, divisions=>100}, })); If you want all function checkers to show diagnostics, use Context()->diagonstics->set(formulas=>{show=>1}); The image file names are modified to include the current time so that the names will be unique. This avoids problems with the browser cache showing a old image when a new one has been generated. But this also means that the temporary image directory will fill up fast, so you may need to empty it if you use the diagnostic images frequently. This is just a first attempt at a diagnostic feature. I think it will help when you are not sure if the tolerances are set properly, or if you think a student answer should be markes correct but isn't, as it will point out which point(s) are not being accepted.
Modified context data objects to provide a copy method so that the various types of data can copy themselves (and can provide a more comprehensive copy if necessary).
Let Parser object's cmp(debug=>1) option set the debug feature of the answer evaluator.
added "height: 10em; overflow: auto;" for div.Siblings fixing bug #581.
show first pdflatex error (bug #850), HTML escaping. - generate_hardcopy_pdf() now reports the first error encountered in hardcopy.log in the list of errors. - variables substituted into errors strings are now displayed inside <code>..</code> tags, and their values are escpaed with CGI/pm's escapeHTML() function.
eliminate undefined value usage in unformatDateTime, fixing bug #826. also factored out error reporting into unformatDateTime_error and improved formatting slightly.
added sorting of set definition files, fixing bug #809. also added no_chdir=>1 flag to File::Find::find and modified $get_set_defs_wanted accordingly.
added check to ensure that permission level is numeric, fixing bug #822.
added $default_permission_level
don't show "act as" link unless the user is actually allowed to.
stop redirecting to Login when user is not allowed to "act as". Instead, throw an exception.
Added syntactic sugar for pop_up_lists. A common situation is that a problem includes a short multiple-choice question along with other answers. Often, these questions are written as fill-in-the-blank where the student is told a list of legal words to put in the blanks. The idea is to make it as simple as possible for problem writers to replace the fill-in-the-blank with a drop-down list of alternatives. So, now the text of a problem can contain is the function increasing on [0,1]? \{ pop_up_list(['?', 'yes', 'no']) \} instead of is the function increasing on [0,1]? \{ pop_up_list('?' => '?', 'yes' => 'yes', 'no' => 'no') \} The result is checked with something like ANS(str_cmp('yes')); Existing problems are unaffected since the added syntax uses a reference to a list (the extra square brackets).
Add a new context flag that controls how the student answer should be displayed. The formatStudentAnswer flag can be set to 'evaluated' (the default), which shows the final numeric answer; 'parsed', which shows the fully parsed version (including extra parentheses for clarity); or 'reduced', which performs constant operations, but doesn't perform function evaluations or named-constant substitutions. For example, if the student answers 1+2+sqrt(3), then 'evaluated' will produce 4.73205, 'reduced' will show 3+sqrt(3), and 'parsed' will show 1+2+sqrt(3).
If constant functions are not being reduced, don't mark the function call as constant (since otherwise it might be evaluated later accidentally).
putting site_info back in htdocs. see bug #832.
make sure there are answer blanks before printing \begin{itemize}. fixes bug #859.
added full_name and rfc822_mailbox methods for convenience.
added names to From: and To: email addresses, if users have names defined. noted in global.conf.dist that feedbackRecipients can include user names.
fix for bug #832 -- default site_info.txt is blank and in correct place.
Fixed a bug where correct_ans could not be overridden in the cmp() method for Lists.
fix for bug 815 "Emphasize set name on the Assign users to Set page (set detail page)"
added check for $total==0 to eliminate potential DIV error (bug #855)
disallow login of "dropped" practice users (bug #387). also don't show Guest Login button if there are no "dropped" practice users.
fixed typo.
added "include_in_email" behavior to Enrolled and Audit statuses.
modify usage of user status to take advantage of new status system. the most extensive change is in UserList, where the names of statuses are now shown in the status column along with the abbreviation that's actually set in the database, and the edit popup shows the actual names that are defined in global.conf.
Corrected a problem with contexts not being reset properly after num_cmp or fun_cmp.
Implemented status system as per bug #743. The status system consists of a new hash in the course environment, %statuses, that maps status names (like "Enrolled", "Drop", "Audit") to (a) a list of allowed abbreviations for the status and (b) a list of behaviors the system should have when dealing with users who have the status. I didn't want to have to mangle that hash-of-hashes-of-arrays myself in many modules, but I also didn't want to devote an entire module (Status.pm) to it. So, I'm trying a little experiment: I've added them as methods to WeBWorK::CourseEnvironment. My thinkint is that since all the data for these operations comes from the course environment, so why not have them be course environment methods? Here they are: status_abbrev_to_name($status_abbrev) Given the abbreviation for a status, return the name. Returns undef if the abbreviation is not found. status_name_to_abbrevs($status_name) Returns the list of abbreviations for a given status. Returns an empty list if the status is not found. status_has_behavior($status_name, $behavior) Return true if $status_name lists $behavior. status_abbrev_has_behavior($status_abbrev, $behavior) Return true if the status abbreviated by $status_abbrev lists $behavior. Since I removed the previous $siteDefaults{status} hash from global.conf, I have already switched modules that formerly used that hash over to using the new methods: Authen.pm: use status_abbrev_has_behavior($status, "allow_course_access") to determine if a user should be allowed to log in. Feedback.pm: look up status abbreviation using status_abbrev_to_name() and print the result for the status field in the email. Instructor.pm: use status_abbrev_has_behavior($status, "include_in_assignment") to determine if a user should be included in an assignment. UserList.pm and UsersAssignedToSet.pm: use status_abbrev_to_name() to get name of CSS class.
Added e-mail feedback verbosity to config area.
Added email subject line to config variable.
Allow basic types to specify the width of their input fields, and changed the handling of the long doc strings. The long string is no longer sent as a parameter where it might be truncated.
Made a little more html use CGI::* methods.
Added some todo items, and fixed minor bug with the minimum number of displayModes (it was supposed to be a variable).
New Config module. It will put its course settings in a file simple.conf along side course.conf. Changes are: URLPath.pm: wiring so the Config module can be called ContentGenerator.pm: link in left panel to Config module CourseEnvironment.pm: evaluate simple.conf. File name can be specified when creating a new CourseEnvironment. This allows it to be bypassed (which is currently used), or to test a simple settings file (not used now, but it might be useful). Constants.pm: all data about configuration is stored here. New values can just be added here, unless they are a new type. Config.pm: new module for limited course configuration. Note, it might be better to move the new variable in Constants.pm to another file. Committing changes to Constants.pm can be an extra hassle since it contains some site specific configuration.
Add location/name of simple configuration file. It is written by the Config module.
Removed unneeded "my" for a varaible that is already local.
Major update to allow ImplicitPlane objects to be created automatically by the Parser when it sees equal signs. This makes it possible to use ImplicitPlanes in Lists. (Before, when the List was turned into a Formula returning a List, the equality became a plane old equality rather than an ImplicitPlane object.) This is a bit of a hack for now until I can make List and other Value objects be allowed to have Formulas as their entries rather than turn into Formulas returning Lists (or whatever type).
Handle the names of entries in Lists and Formulas returning lists better. Also do better typechecking on these lists. Finally, allow better typechecking for String objects that are being used when a Formula answer is allowed.
Allow context to override object class used to create formula objects (so that things like ImplicitPlane can create instances of themselves automatically when needed). This mechanism needs to be enlarged to encompass the other Value object classes as well (like the Context()->{parser}{...} hash). The real problem is that the List object probably shouldn't create a formula returning a list when it is passed formulas, since there really isn't much need for a formula returning a list to be autogenerated (you can create one by hand using Formula if needed). Right now, ALL the Value objects make themselves into Formulas when one of their entries is a formula. For example, Point(1,"x") produces the same thing as Formula("(1,x)"), and List(1,"x") is the same as Formula("1,x"). This is good for points, but not so good for lists. And it might sometimes be nice to have a Vector of Formulas, or a Matrix with Formula entries (rather than Formulas returning Vectors or Matrices). But this would require some serious changes internally in the Value objects, which make assumptions about their values being constant. Changing that will be for another day...
Correctly create Formula returning List when a list has formula entries.
added manage_course_files activity. changed FileManger to use new activity. added hasPermissions() checks to Index and Contentgenerator to only show File Manger when user has permission.
fix error reporting for include() function.
give user an error message if they can't act as another user. see bug #846.
modifications to support changes to global.conf.dist adding %userRoles hash and changing the meaning of values in %permissionLevels. Authz will now look up the role obtained from %permissionLevels in the %userRoles hash, and compare the resulting number with the user's permission level.
implemented named roles for permissions system. %userRoles maps role names to numeric permission levels, and %permissionLevels now maps activities* to role names. A slight change to Authz.pm accompanies this change to do the role-to-permission-level lookups. * a.k.a. operations, privilegespermissions, gotta get the terminology straight. think of the users! %userRoles should be used by modules such as UserList for providing more intelligent editing of the permission_level field. Another possible use would be to for pretty-printing user types -- a user could be called a student, ta, professor, etc. based on what role corresponded to their permission_level.
Only add the 'dx' variable if it isn't already in the context.
Fixed a problem with the automatic upgrading of object classes for when Value objects are subclassed but are not entered into the precedence list.
Improve the label on submit button in single user mode.
Allow making a local copy of a library problem with a single button push. The user interface is still cluttered. I think I'll rewrite the bottom button rows using radio buttons and a 'Take action' submit button as on the Classlist and Homework set editor pages.
Simplified the interface for users (who can only download one set at a time and can only download one user). It could be made slightly more general -- it currently implicitly assumes that either one can edit both multiple sets and multiple users or one can edit only a single user and a single set. Removed an error in the [edit] link when there is an error. The anchor HTML tags were wrapped two layers deep around the reference. Can probably still use some more tweaks in the interface. -- Mike
Changed the wording of the initial course.conf file.
Formatting change for readability
fixed problem with `!' in set IDs, improved error reporting. the `!' poblem was caused by passing UserSets to ScrollingRecordList instead of passing GlobalSets. UserSets have a two-part key (user ID and set ID), and ScrollingRecordList concatenates them with a `!' to create the value names. This is a desireable behavior, but not one that I remembered. Whoops.
Fixed a bug where if you specified a variable other than dx, the division by zero check didn't work properly.
Fixed typo in comments.
Make email addresses active on the classlist page just as they are on the student progress page.
set a default value for hardcopy_format if it's not given.
pointless confusion, while humorous, is not good for maintainability.
percent sign snuck in there oops
Changed the numerical values of lbf to make it more accurate (assuming that lbf is an abbreviation for ft-lbs which I doubt). Also replaced the conversion factor for pounds with a more accurate figure.
Updated to be able to handle empty anwswer blanks. There is a new parameter for the MultiPart object (allowBlankAnswers) that controls whether the checker routine will be called even when there are blank entries (normally, the checker is not called unless all the entries are non-blank). Use $mp = MultiPart(1,2)->with(checkTypes=>0,allowBlankAnswers=>0); to have the checker routine called when answers are left blank. You can now also include blank answers in the list itself: $mp = MultiPart(1,2,""); (there is no need to include allowBlankAnswers in this case, because the blank string will take care of itself.
Prevent empty answers that are marked as correct from being counted as unanswered blanks. This avoids the "all the above are correct/at least one of the above are NOT correct" problem, and suppresses the "n questions remain unanswered" message when the empty questions are counted as correct.
Added ability to have answers that are empty strings. String("") now will produce a valid string object regardless of the Context's defined string values. (You can prevent this using Context()->flags->set(allowEmptyStrings=>0); if you wish). String("")->cmp will produce an answer checker for an empty string (it removes the blank checker that WW installs).
added download_hardcopy_format_pdf permission, set to $guest. This allows professors to turn off hardcopy altogether by setting all the download_hardcopy_format_* permissions to undef. Also change the default permisisonLevel for $guest to -5, to match the permissionLevels for the practiceUsers in defaultClasslist.lst. (It was supposed to be -5 all along.)
Use new hardcopy param names.
Extensive refactor/rewrite. There are probably going to be bugs here that we squished in the old version of Hardcopy, but it seems to be pretty robust after an evening of testing. Alert me if you see problems. Features: * standard ScrollingRecordLists are used for user and set selection. * TeX source is written incrementally instead of being accumulated in memory. * arguments to shell commands are now quoted using String::ShellQuote * modular design allows adding additional formats easily (i.e. dvi, ps) * error reporting code is simplified. * if errors/warnings occur, user will see them on screen instead of getting the hardcopy file. * on the error screen, user can click to get (possibly broken) hardcopy if it exists. * on the error screen, user can click to get interesting temporary files. (for PDF format these are hardcopy.{tex,log,aux} and pdflatex.std{out,err}.) * on the error screen, if an error concerns a particular problem, an "edit problem" link is included. * probably more stuff i'm forgetting
changed label for context URL to "Click this link to see the page from which the user sent feedback".
restrict dates to < 10 years in the future -- see bug #829.
since the subject line can be changed now, email filters would be wise to rely on something more static. i've added X-WeBWorK-* headers to accomodate this: X-WeBWorK-Module X-WeBWorK-Course X-WeBWorK-User X-WeBWorK-Section X-WeBWorK-Recitation X-WeBWorK-Set X-WeBWorK-Problem
implement customizable feedback subject line. The following escape sequences are recognized: %c = course ID %u = user ID %s = set ID %p = problem ID %x = section %r = recitation %% = literal percent sign
Add section and recitation to feedback subject line as per Gavin's suggestion.
fixed small typo
added "use WeBWorK::Debug" to allow debug() statements to work.
Fixed a problem with reporting the directories where files with given types should be uploaded.
Fix bug 819. This adds a method to DB for getting all merged problems for a (student,set) combination so that the problem value can be correct. See bug 819 for additional comments on how this affects scoring when an individual student is given an override value for "weight".
added nice custom formatting routines for user/set/problem data: * uses "yes" and "no" for true/false values * formats dates * uses "unlimited" for -1 max_attempts * uses pretty names for the status * decodes the answer string * lines up output
Fixed bug where str_cmp("0") was changing the correct answer to "", making it impossible to get correct.
Prevent the empty list from having open and close be set to 'start' (a value used internally).
Expanded information in error messages.
Added \usepackage{epstopdf} on the suggestion of Frank Wolfs to the TeX header. This allows the CAPA files to print pictures with pdflatex even though they use .eps figures.
Use underscore2nbsp from higher up module. Hopefully this fixes bug 841.
Don't allow wrapping in label for ans_array errors.
Improved layout and labeling of error messages.
The Parser answer checkers used to give the student answer as the parsed but unevaluated answer. This has been changed so that the student answer is now the computed result, no the parsed answer. The answer preview still shows the parsed equation. This is more consistent with the traditional answer checkers, and probably is more valuable to the students.
Better error messages for unreduced unions.
Improved error message layout and labeling for when ans_array is used.
Improved error messages for formulas returning infinity
feedback is now sent to users with receive_feedback permission regardless of the contents of the feedbackRecipients list in global.conf. Comments in global.conf now read: By default, feeback is sent to all users who have permission to receive_feedback. If this list is non-empty, feedback is also sent to the addresses specified here. * If you want to disable feedback altogether, leave this empty and set submit_feeback => $nobody in %permissionLevels below. This will cause the feedback button to go away as well. * If you want to send email ONLY to addresses in this list, set receive_feedback => $nodoy in %permissionLevels below. It's often useful to set this in the course.conf to change the behavior of feedback for a specific course.
use new feedbackMacro(), put "edit this problem" inside the problem DIV.
use new feedbackMacro()
added feedbackHelper to consolidate generation of feedback form.
allow printing of error message upfront when there are no recipients.
cosmetic changes (blank lines, comments, ordering)
Modifications to the directions for archiving courses.
Bring jsMath up to version 2.1d, which fixes a number of small bugs, including: o There was a problem with image fonts where the cached data about the size of the images was not being checked properly, so was recomputed every time a character was displayed. The cache is now properly handled, so that should speed up image mode. o Fixed a bug where loading extra fonts while in image mode would cause the data about previously loaded image fonts to be lost. o Fixed a bug with "Hi-Res Fonts for Printing" where the fonts where incorrectly scaled so that they appear far too small. (This worked in an early beta version of jsMath v2, but apparently hasn't worked properly in any production version.) o Fixed a long-standing bug where horizontal lines are only displayed in black, not in the color specified by \color (or by a style from the surrounding text). o Fixed a similar bug with \rule so that it now produces a box with the color of the surrounding text. o Dimensions can now be enclosed in braces (for example, \rule can be \rule{10pt}{5pt}{3pt} as well as \rule 10pt 5pt 3pt). o Fixed a bug where extra space was inserted in some equations for browsers that don't allow absolute positioning within an in-line element (e.g., Opera).
Hide the "important message" text unless there is actually a message in site_info.txt
In hardcopy, a TeX file download has to have the extension .tex, not .pdf
Change back to $mail{smtpServer} = 'mail.yourschool.edu';
Fixed problem with recognizing MINF in NUM_CMP.
The ORIGINAL_NUM_CMP was calling str_cmp as a code reference rather than as the more modern AnswerEvaluator object. This causes error messages when string answers were used. It now uses the evaluate() method of the AnswerEvaluator.
Add clarification to error message for surePathToFile
Fixed an error where scalar() was used on a hash ref. Fixed a misfeature where operations on formulas could return Value objects of other classes; they should always return formulas, even when the formula is constant.
Avoid undefined value of $name.
Restored changes that were accidentally clobbered when the gateway changes were checked in. Email now uses post processing to email students.
Fixed some documentation comments.
Fixed a bug in which, if the Hardcopy call was the first one to need to create the directory at (e.g.) /ww/htdocs/tmp/myCourse then the creation of myCourse would fail. If /ww/htdocs/tmp/myCourse/gif already existed things would go fine. I think that more has to be done here. We need to look at how myCourse is created when storing a gif or html is the first action and handle these all the same. One of the difficulties is that the tmp directory might be located anywhere -- it is not guaranteed to be under /ww/webwork/webwork2/htdocs -- at least as we have defined it at the moment.
Display the information in site_info.txt on the webwork2 homepage as well as on login pages.
Sam changed open(LOG,...) to open(my $log, ...), but didn't change the usages of LOG to $log, so the show answers page was always reporting no past answers available. Now the values are being shown. (I'm not sure why it is necessary to make a local variable for LOG, but at least it works now.)
string2hash will now handle strings with newlines, fixing GDBM.
disable newlines every 76 characters in base64-encoded answers. this is nice for examining database contents manually since it prevents newlines from being introduced into database records.
Typographic clean up of global.conf.dist
Added support for cplx_cmp() using the Parser. Move lib/Parser/Legacy/PGcomplexmacros.pl to the pg/macros directory to use it. As with the other legacy macros, $useOldAnswerMacros can be controlled to determine whether the new or the old macros are used. There is a new mode 'strict_cartesian' that is parallel to 'strict_polar'. You must enter a+bi form, but the a and b can have operations within them.
Added "strict" versions of the limited complex contexts that don't allow operations within the real and imaginary parts. Also cleaned up some of the code and fixed a few situations that had been missed before. Note that in strict mode, e^(pi i) is accepted, but e^(pi/2 i) is not. Should that be changed? It would be possible to make a context in which a*e^(b*pi/c i) is accepted.
Movified the copying of functions from Complex1:: into main:: to avoid conflicts with the PGcommonFunctions.pl versions (these errors were trapped, but still show up in the error log unnecessarily). Also commented out some code that was not doing anything other than producing error messages in the error log. (It was left over from a syntax check on the professor's answer, but the actual check was removed, leaving a portion that tries to process the answer, but usually fails (because things like "1+4i" need to be converted to "1+4*i" before they can be used in PG_answer_eval, but that was not being done). Because of this, it is not possible currently to do cplx_cmp("1+4i"), and instead you must to cplx_cmp(new Complex(1,4)). To fix this, you would need to call check_syntax (and the other filters that are called on the student's answer) before calling PG_answer_eval. Of course, you should only do this when the professor's answer isn't already a Complex object. I am going to work on a Legacy module like the ones for num_cmp and fun_cmp to replace cplx_cmp, which should avoid these problems and make the changes suggested above unnecessary.
transparent (lower case t) is not valid with dvipng 1.2. I changed the note and went back to Transparent in the default.
uh, hasPermissions() is a method, so it actually gets 3 arguments. print the arguments received as part of the error message. TESTED THIS TIME!
call hasPermissions() with two arguments (it doesn't use the eUserID anyway.
fix for security aspect of bug #715 -- reject calls with @_ != 2.
Fixed error in atan2 where second argument was not promoted to a Real.
Fixed bug in use of advanced display panel which prevented it from displaying problems. Default values like "All Textbooks" needed to be cleared so it wouldn't be mistaken for actual textbook names.
Implemented Mike's suggestion of combining a directory upward only when the directory contains one pg file and the name of the file is the same as the name of the directory containing it. I have removed the condition that there need to be other (non-pg) files in the directory, as the check takes time, and is no longer necessary.
Change arguments passed to dvipng
fixed error message when answer log does not exist
The perl method for UOP and BOP now put spaces around the operator, to prevent Perl from thinking that things like -e is a file test and *Parser::Function->call is a name reference. (Some of these had been done by hand earlier, but now the base BOP and UOP classes handle it, so we should not have problems in the future). I removed the ad hoc fixes from several other locations (Parser/Function.pm, Parser/Context/Default.pm). Also extended the operator definitions to allow operators to create function-call syntax in perl mode (for when the operator doesn't correspond to a perl operator).
Fixes bug in add where blank values were being turned into 0 by mysql for columns of type integer. The analogous change was previously made to put. This bug showed up when renumbering problems in ProblemSetDetail (e.g., renumbering) when a set was already assigned to users.
Added the ability to put class-specific answer-checker defaults into the Context object. For example, Context("Vector")->{cmpDefaults}{Vector}{promotePoints} = 1; would make all Vector answer checkers include promotePoints=>1 automatically. (Note however that if a subclass of Vector is used, it will not get this defaults, since its class name would be different. Perhaps something more sophisticated will be needed in the future.)
Added a parserCustomization.pl file that is loaded whenever the Parser.pl file is. This can be used on a course-by-course basis to customize features of the Parser. Some examples are listed in the file. You need to be VERY careful when doing this, as this will affect ALL problems that use the Parser. Your changes may cause some .pg files to fail if they rely on the default behavior that you are changing. If you wish to override settings in one of the predefined contexts (like "Vector"), then define $context{Vector} as a copy of $Parser::Context::Default::context{Vector}, as in the commented out examples. Then Context("Vector") will use your copy rather than the original. If you were to change the version in Parser::Context::Default, that would change the parser for ALL courses, not just yours.
Added a Point context that is a copy of the Vector context. This will allow users to override some settings in Vector context (namely, how they are entered and displayed) without preventing users from being able to enter points (in Point context).
Removed unused variable. Fixed an incorrect error message.
Corrected a mistake in a debugging message.
Fixed a bug where a set named "0" would not be sticky in the Target Set list (because it looked kind of like an empty/undefined name).
Allow use of an activity log which logs every click, stored on a per-course basis. It is turned off by default. It can be turned on/off for individual courses. The three pieces here: global.conf.dist: adds a place to define the log file. Here an empty value signals to not do this logging. ContentGenerator.pm: check to see if the log file is defined (and (non-trivial), and if so, write a log entry. We check if it is defined at this point to both save some time, and because if we get to writeCourseLog and the log isn't defined, we get a pink screen. The bulk of the text of the log entry is performed by a new method prepare_activity_entry. By default, this gives the url, and a list of all the cgi parameters (except for key and passwd). This method can be overridden by individual modules. The default format may change. It may take some fine tuning to see what is best. Also, this is one of the first functions called by go. We may want it to go after the action has taken place if we want instructor modules to be able to report results of their work through this log. SetMaker.pm: gives an example of overriding prepare_activity_entry. SetMaker has lots (and lots and lots) of data stored in cgi parameters. We probably don't want to log that. We might want to log a little more in SetMaker than we do here (target set), but this gives a start.
comment out hack for peekaboo bug
replaced $externalPrograms{netpbm} with lexical $netpbm_prefix. this will prevent netpbm from going into the cource environment (where is it not needed) and makes it clear that it is a prefix and not the path to a program.
When dealing with showOldAnswers defaults, allow control of who get get the system default after the due date instead of hard-wiring it. Default value is that students don't initially get old answers after the due date, but professors do.
improved handling of symlinks in listFilesRecursiveHelper. symlinks to files are now treated as files instead of directories.
Fix bug where perl functions which may need parentheses by forcing them when the function starts Parser::Function->. This seems to work, but there might be a better way to do it, or need other cleaning up.
When making on-the-fly image names, replace periods in the student login name to avoid problems with pdflatex. Changed the replacement in set names to use the same new trick (the old way had an infintesimal chance of collision). The new scheme is first double all instances of "Q". Then replace periods with "-Q-".
Add some electrical units. Take two, hopefully in the correct branch this time.
Updated instructions to match changes to global.conf.dist and the move or PGanswermacros.pl.
A separate copy of this file is no longer needed.
This makes the pg/lib/Parser/Legacy copy of PGanswermacros.pl the official copy here. This still leaves the original answer evaluators as the default, but simplifies the update process, and we don't have to maintain two copies of the original functions.
Load Parser::Legacy. This change is needed for the current version of extraAnswerEvaluators.pl to work out of the box. By default, one will still get the original (non-Parser) versions of num_cmp and fun_cmp, but turning on the Parser-based versions will be much easier (just one line to change, or override on a course by course basis). There will be a companion change in the pg directories.
Intialize tth preamble variable to avoid undefined errors when running in formattedText mode.
Fixed problem with Context's not properly initializing themselves with the WW environment parameters (like zeroLevelTol and useBaseTenLog). The copy method and the method that did an initialized copy used to be separate routines, but that turned out to be unnecessary, so they have now been merged (copy always tries to initialize the WW values when it can, and when the copied context doesn't already have them). The reason this is complicated is that a number contexts are set up before the global.conf data is available, so these can't be initialized with the WW values. Also, these default contexts are stored in the persistant processes, and we don't want to leave possibly course-specific values lying around in them, so whenever a context is selected, it is copied from the standard version and the WW parameters are inserted into it. The problem author can only modify the copy, not the original, so this is OK with mod_perl. The context's copy method now always tries to initialize (we used to have to call initCoopy to get a copy that has the WW parameters inserted). That turned out to cause trouble with code that handled contexts without the usual Context() command.
Fixed log and log10 perl methods so that log obeys the useBaseTenLog flag, and log10 doesn't try to call main::log10, which is not available from within this preloaded package. The in- and outside the safe compartment stuff is very confusing, and functions that are not overloaded native perl functions seem to be not callable from the Value::Formula package, so the perl method now calls Parser::Function->call() directly (doesn't look pretty, but I've given up on that).
Avoid undefined due_date when problem is viewed from the library browser.
In order to overcome an MSIE bug that affects jsMath, the call is changed from jsMath.ProcessBeforeShowing() to jsMath.wwProcess(), which is added by the jsMath-ww.js file. (This routine uses an onload handler for MSIE to put off the processing until MSIE can handle it properly, but allows all others to do it at the usual time.)
Updates to overcome yet another bug in MSIE. It turns out that MSIE can completely botch up the display if jsMath.ProcessBeforeShowing() is performed at the point in the web page that we have to put it, so we call wwProcess instead, and if it is in MSIE, we add an onload handler to call ProcessBeforeShowing. It's a hack, but it works.
Make it so that by default, practice users don't see saved answers. That can be controlled in global.conf.dist. Also, default to not showing saved answers after the due date. In all cases, the Apply options button can adjust what you want. Also fixed a bug with showOldAnswers related to '', 0, and undef being similar in perl.
Fixed bug 753. The number of all users needs to be recomputed after action handlers in case some users were imported or deleted.
Changed stringify to check for an answer that is zero by using the zeroLevelTol value directly (rather than use the fuzzy equality check for zero, which depends on the tolType in a bad way).
Fixed minor glitch where the toggle for show saved answers might be set wrong for the first time a student looks at a problem.
Made relative tolerances the default for when the tolType is not one of 'relative' or 'absolute'.
Removed initialize function which did nothing. Moved the actual assignments/unassignments to pre_header_initialize so they could use the messaging system.
Added safety toggle for unassignment on this page (like other places where sets can be unassigned).
Hopefully fixed the logic of setting numerical tolerance defaults.
Fixed problem with display_matrix_mm so its behaviour matches its documentation. This may break problems which relied on its previous incorrect behavior.
Use a default for the zeroLevelTol set in the current context.
Deleted commented out line (which had been used for debugging).
This adds wiring to the pg side for special bits of html to be included before/after the body of a problem. You also need to update global.conf (and probably want to update Tasks.pm). A commented out example in global.conf.dist shows how to use this to produce boxed problems a la the Union College server. In this approach, the added parts are not used for problems rendered in the Library Browser or Problem Set Detail. This addresses bug 817. This solution may not be suitable for inclusion of needed bits for modes such as asciimath or tth because the those bits of html are probably needed for display in the Library Browser. It is hard to distinguish bits which are always wanted, and those which are only wanted for use by Problem.
Allow snippets of html (or Tex) to be specified in global.conf to be inserted right before/after the body of a problem. A commented out example which produces boxed problem in HTML is given. In this approach, the added parts are not used for problems rendered in the Library Browser or Problem Set Detail. This addresses bug 817. This solution may not be suitable for inclusion of needed bits for modes such as asciimath or tth because the those bits of html are probably needed for display in the Library Browser. It is hard to distinguish bits which are always wanted, and those which are only wanted for use by Problem. To make use of this, you need to update your global.conf, and make the corresponding pg update.
Previously, the "Unassign selected sets from selected users" button did not work. Now it works. To help avoid inadvertant unassignments, the button was moved lower on the page and put in the "danger" background color. I also made the assign and unassign buttons the same length for better aesthetics. Some things still to do in this module: - maybe move unassign even lower - maybe have a safety radio button to unassignments like on other unassign pages - move the action from body() to pre_header_initialize() so that addgoodmessage/addbadmessage will work like on other pages - get return values from the assignment/unassignment commands in case something goes wrong. Right now, the system can explode and it will still say "All assignments were made successfully". - it could also report some information on assignments/unassignments actually made vs. combinations which were skipped.
Fixed function unassignSetsFromUsers.
Changed default directory shown to be the templates directory. Changed GZIP and UNGZIP to 'Make Archive' and 'Unpack Archive'.
Changed "current set" to target set to match terminology at the top of the page.
Part of change dealing with bug 813. Possible things still to do here: change names of variables to reflect that they contain commands and not scripts have a variable for the path to cat remove the scripts themselves
Moves configuration of gif2png and friends to global.conf. Individual paths, and/or arguments to the conversion statements can be adjusted. To make use of this change, update global.conf and pg/macros/dangerousmacros.pl This should close bug 813. At some time, the scripts should be removed from the bin directory.
Update help file to match some recent changes in checking of answers which are intervals.
Removed bits which were accidentally included during last commit.
Should fix bug 696 by replacing consecutive whitespace with a single space for answers in an individual ans_rule.
Fixed some indenting.
Updated to 2.1a, which fixes a problem with the domain checking when the server is running on a non-standard port number.
level_curve_check now forces the use of the old style (not Parser::Legacy) answer evaluators resolving bug 820.
Updated to handle jsMath version 2.
Changes needed for version 2 of jsMath. Since the image font fallback method works well enough without having the TeX fonts installed, the font warning message has been turned off by default. There is also a new parameter that controls whether the image fonts are to be used, so if you don't want to unpack the jsMath-fonts.tar.gz file (for space considerations), you should set $pg{displayModeOptions}{jsMath}{noImageFonts} = 1; in global.conf.
Updated jsMath to v2.1 (which includes the new control panel and the new image font fallback method). You will need to unpack the jsMath-fonts.tar.gz file in the htdocs/jsMath directory to form the htdocs/jsMath/fonts directory. The commands cd htdocs/jsMath tar vfzx jsMath-fonts.tar.gz should do it. Finally, you need to corrections to pg/macros/PG.pl and global.conf.dist to complete the installation.
Added code to handle the case where the professor's answer is in expondential notation using a little e instead of a big one. (Perl will convert .0000001 to 1E-07, for example, before it is passed to num_cmp.)
re-added timer for entire content generation process.
enabled logging
Make title look nicer for times when the set name has underscores in it.
disabled logging for small file test
Fixed more undefined values
Remove the no longer valid message: This may take a long time. Even if your browser times out, all the files will be exported
Changed Context() call to direct reference to context, so as not to leave the wrong content selected as the current one.
Add the beginnings of a facility for archiving a course. This method uses mysqldump and therefore will work only with a mysql database. Many things are still hardwired In particular mysqldump is hardwired. The database name is hardwired to "webwork" Archiving consists of dumping the tables associated to the course to a file $courseID/DATA/$courseID_mysql.database (this file can be used to created a new database for the course. it will not overwrite existing tables however.) Then the entire course directory is tarred and gzipped and placed in the courses directory with the naem $courseID.tar.gz Currently nothing is deleted from the database and no directories are deleted. So the implementation is fairly safe, but not yet very useful for course management. There is not yet a facility for automatically importing the archived course.
Eliminate extra insetting of tables within the results area (e.g., tables produced by the matrix array answer checkers).
Added mising ';' in viewOptions
Added methods for testing containment of one set in another, and so on. These include: $A->contains($B) Test if $B is a subset of $A (or an element of $A if $B$ is a real number). $A->isSubsetOf($B) Test if $A is a subset of $B. $A->isEmpty True if $A is the empty set. $A->intersects($B) True if $A and $B have numbers in common. $A->intersect($B) The set of numbers common to both $A and $B. Be careful of the difference between "intersect" and "intersects". One is a set the other a true/false value.
Added a copy method that produces a deep copy of the given object. This probably should be used through the new() methods to ducplicate the data used when creating an object, otherwise changes to the sub-objects will cause changes to the outer one. For example, if an interval is used to create a union and then the internal data for the interval is changed by hand, the changes will also occur in the union. That is, Value objects contain their data by REFERENCE. This should probably be changed, but fortunately, no one should be adjusting the internal structure of the objects by hand.
Added canBeInUnion and isSetOfReals methods to the Parser package (similar to the ones in the Value package), replacing the canBeInterval flag and other ad hoc checks. Removed ability to form interval like [a] now that we have sets.
Maintain parentheses correctly when converting to perl.
Add style for comments originating from COMMENT() and rendered in the Library browser.
Implimentation of COMMENT for comments to appear in the library browser.
Print contents of COMMENT() commands in the Library Browser.
Allow a list of numbers to be converted to a set.
Pass the canBeInUnion call on to the Formula's root node
Added isSetOfReals and canBeInUnion methods to the Value objects, and replaced the ad hoc tests for these conditions to call these routines. Cleaned up the make() methods for Intervals, Sets and Unions, and improved the new() methods to handle more cases better. Fixed Value::makeValue() to handle an array reference correctly. I don't THINK any of this will break anything. :-)
Make formulas that produce lists get default open and close parens, and have them retained in Formula() results.
Make sure the singletons are sorted before comparing them to the intervals (and each other).
Fixed treatment of options in setting the mode and optional parameters related to reducing unions.
Can't use the length check when reducing unions, since it could contain a single set that is not reduced, and we need to check that, too.
Fixed reduction warnings for individual sets, intervals and unions (in making it work for lists, I broke it for the single items).
Fixed a problem with redefine when used with classes that store their data in a on-standard form (i.e., by overridding the create() method). Now they can define uncreate() to get the original data back for use with redefine().
Fixed mad error message (change needed due to new message translation facility).
Added isReduced method to tell if a Union, Set or Interval is already reduced. Fixed up sort to use CORE::sort, and added sort and reduce to Intervals, which do nothing, but are there for consistency.
Fixed error in testing is a union is reduced (didn't test if sets within a union were reduced properly).
Moved a chunk of duplicated code to its own function, and tweaked the setting of the context in a few cases.
Added sort methods to Union and Set that return objects with their data sorted.
Moved the union and set reduction checks from cmp_equal to cmp_compare so that the messages can be produced even in lists of unions. Improved the message facilities for the list comparison so that cmp_compare can make errors that refer to the number of the entry in the student's answer (otherwise an extra "There was a problem with your nth value" message needs to be prepended, which looks bad if it can be avoided). Use the "extra" answer checker to report syntax error messages in unordered lists.
Fixed problem with call to $equation->Error (due to change in error-handling that allows for translation of error messages).
If a problem file sets $refreshCachedImages=1 inside the pg file, then cached copies of on the fly graphics are ignored and the graphic is regenerated.
Added differentiation of (single-variable) functions created with parserFunction.
Fixed typo in previous update.
Added sets to the differentiation information (no derivatives allowed)
Fixed a typo in an error message.
Added ability for Unions and Sets to simplify themselves (automatically or on demand), and added flags to the Context and answer checkers to control these features. The new Context flags are reduceUnions tells whether unions are automatically reduced when they are created. reduceUnionsForComparison tells whether unions are reduced before comparing them for equality or inequality (etc) if they aren't reduced already. reduceSets tells whether redundent elements are removed from sets as they are created. reduceSetsForComparison tells whether sets are reduced before comparing them. All of these default to true. The Interval, Set, Union, and List answer checkers not have two new flags for controlling these values: studentsMustReduceUnions tells whether unions and sets will be counted as incorrect when they are not reduced to non-overlapping intervals and at most one set with no repeated entries. showUnionReduceWarnings tells whether an error message will be produced for non-reduced unions and sets, or if they will be marked wrong silently. (Not available in Lists.) Both of these are true by default, since most professors probably want their students to write intervals in reduced form. (Is this true?) This corresponds the the current behavior of the interval checkers, which require the student's answer to be the same set of intervals as in the professor's, but with the addition of an error message when the student answer is not reduced.
Print titles with underscores replaced by non-breaking spaces. It makes the names of courses and problem sets look nicer for students. Also removed a function which was already commented out, and not needed.
Fixed use of undefined value for $position in TeX and String methods.
Made the 'R' constant in Interval context show up as a bold R in TeX mode.
Detect preview mode correctly for either WW1 or WW2.
Adjust spacing.
Mark function as constant if it is.
Update interval notation information for students based on recent improvements in the Parser.
Completed conversion of interval_cmp to use Parser objects. Also, minor updates to number_list_cmp.
Avoid problem with undefined value being passed to protectHTML.
Changed how Intervals implement the requireParenMatch flag for the interval and union answer checker. (Use a Context flag rather than a flag on the interval itself.) Moved the getFlag method from Formula.pm to Value.pm so it can be used by any object class. New feature where classes can add more context flags to set (and reset after the answer checker runs).
renamed weird $QuellSubroutineOutput to $DenySubroutineOutput. This will better match $AllowSubroutineOutput.
added HiRes timing data to WeBWorK::Debug, removed WeBWorK::Timing. all existing calls to the WeBWorK::Timing methods now pass the same messages to debug(). added an option to WeBWorK::Debug to allow only certain subroutines to log debug messages, in addition to the existing option to bar certain subroutines from doing so.
Removed erroneous dollar sign.
Added redefine() function to complement undefine() for various Context() values. For example Context()->operators->undefine('+'); makes '+' undefined, but Context()->operators->redefine('+'); will put it back. You can specify a context from which to take the redefinition, and a name in that context, as in Context()->operators->redefine('U',from=>"Interval"); Context()->operators->redefine('u',from=>"Interval",using=>"U"); Context()->operators->redefine('U',from=>$content); where $content is a reference to a Context object. The undefine() function lets you undefine several items at once, as in Context()->operators->undefine('+','-'); For redefine, you must put multiple names in square brackets because of the optional parmeters: Context()->operators->redefine(['+','-']);
Fixed bug with missing fields in initialization.
added implementation of options() which call optionsMacro(). the version in Problem.pm takes care to preserve the editMode and sourceFilePath parameters.
improvements to view options. removed default options() implementation and helper function viewOptions(), and added more modular optionsMacro() method, which is intended to be called from content generators which require an options panel. POD for optionsHelper(): =item optionsMacro(options_to_show => \@options_to_show, extra_params => \@extra_params) Helper macro for displaying the View Options panel. @options_to_show lists the options to show, from among this list "displayMode", "showOldAnswers", "showHints", "showSolutions". If no options are given, "displayMode" is assumed. @extraParams is dereferenced and passed to the hidden_fields() method. Use this to preserve state from the content generator calling optionsMacro(). This macro is intended to be called from an implementation of the options() method. The simplest way to to this is: sub options { shift->optionsMacro } =cut
moved style information for viewOptions div from ContentGenerator.pm.
revert to using mydisplayMode for the param name (whoops).
Added ability to subtract intervals, sets and unions. Adjusted the precedence of the union 'U' to be above _ and + so that things like (1,5) U (7,10) - {8} U (2,3) will do ((1,5) U (7,10)) - ({8} U (2,3)) rather than the previous (1,5) U ((7,10) - {8}) U (2,3). Finally, added a constant 'R' to the Interval context that is equivalent to (-inf,inf), so you can do things like R-{0} now. Still need to work out reducing unions so that things like (1,3)U(2,4) can become (1,4).
hide options panel here too -- closes bug #802.
removed view options panel, "try it" link preserves displayMode. closes bug #802.
Changes needed for new Set object, plus for moving string, TeX and perl into Value.pm. Also removed unneeded spaces in perl versions of the constants (these were to fix problems with the minus sign, but that is now being handled by the minus operators themselves).
Changes needt for Set object, and fixed a bug with unions containing constant intervals with non-constant ones.
Changes needed to Set object. Also, use Parser to handle unions defined as strings rather than doing it by hand (that's the whole point, isn't it?). Added object promotion from lower-precedence classes (for better error messages), and fixed up the comparison routine.
Changes needed for Set object, better handling of an interval given as a string, and a few misc. fixes.
Changes needed for new Set object, and moving of string, TeX and perl methods to Value.pm
Added changes needed for the new Set object.
Added in the Set object class. Also made more comprehensive defaults for string, TeX and perl output, so these don't have to be subclassed so often. These handle looking up the open and close parens and recursively handling the entries in a list-type object.
Properly maintain open and close parens in emtpy lists.
Added new Set object class to the Parser. It implements a finite set of real numbers, for use with unions and intervals. E.g., (1,2) U {3} or (1,2) U {3,4,5}. You can created Set objects in your perl code via the Set() command, e.g, Set(3,4,5) or Set("{1,2,3}"). You should set the Context to Context("Interval") if you plan to use Set objects, as this defined the braces to form sets (rather than using them as parentheses, which is the default WW behavior). Note that in Interval context, you can NOT use braces as parentheses. Current, Set objects are only allowed to be sets of numbers. It would be possible to extend that in the future.
Make upper-case alias a hidden one (since it is not needed for the pattern).
Dereference aliases to aliases properly.
Default behavior of number_list_cmp set to be backward compatible (no hints of any kind or partial credit). These features can now be activated by optional arguments. Also improvements on parser-based interval_cmp.
Hopefully improved some of how the temporary context is set for number_list_cmp. Many whitespace changes (spaces to tabs). Work in progress for a version of interval_cmp which uses Parser, temporarily called interval_cmp2.
make .def searching thread-safe (resolves bug #814). changed @found_set_defs to be a lexical local to get_set_defs(). replaced get_set_defs_wanted() with a closure over @found_set_defs defined in get_set_defs(). output is identical to the previous case, but no global(-ish) variables are used.
Interval (and Union) checker now accepts requireParenMatch flag for deciding whether the interval type must match. Setting requireParenMatch to 0 will let (1,2) match (1,2] or [1,2], etc.
Cosmetic change.
The Parser versions of num_cmp and fun_cmp incorrectly left the current Context set to the base context used by the answer checker. The Context is now correctly reset to the one in effect before the call to num_cmp or fun_cmp. Also removed some redundant values in if-then checks.
Enable commas when mode=>"frac" is specified.
groundwork for preserving non-authentication state (which probably won't get used)
Changed number_list_cmp to use Parser.
add special case for no problems, closing bug #811.
fix bug #803: corrected typo that prevented course renaming from working.
cosmetic changes, disable experimental components by default.
Can't separate the form into two separate forms (as in the previous update) otherwise the values of the checkboxes in the lower section are lost when a button in the upper section is clicked. So we'll have to assume that if a user selects a file, he really wants it to be uploaded. (He can always use the BACK button on the browser to back out of it if necessary.)
Added problem count to basic library panel, and text chapters/sections to advanced library panel.
fixed indentation (see crabby reminder below). The code I just fixed was using four spaces for one level of indentation and a tab character for two levels of indentation. apparently, this is a variation on the "use spaces for indentation" philosophy that also replaces any run of eight spaces with a tab. this is NOT the way we've been doing things in webwork, and consistency is important (I think). ===> the webwork indentation policy <=== We use the TAB character to indicate a level of indentation, and SPACE characters to line things up in lists. I understand there is some debate as to whether is it appropriate to use "hard" tabs in text files. We do it because some of the WeBWorK developers prefer to view the code with wider indentation (say, eight columns) and some prefer narrower indentation (say, three or four columns). Thus, we use hard tabs for initial indentation and let each developer chose a tab width using their editor. Here in an example of when to use tabs and spaces. ---> represents a tab character. my %errors = ( --->not_found => "The record was not found.", --->invalid_id => "The record ID is invalid.", --->undefined_or_unknown => "The record was undefined or unknown.", ); sub bar { --->my ($self, @recs) = @_; --->foreach my $rec (@recs) { --->--->my $Rec = $self->getRec($rec); --->--->if ($Rec->error) { --->--->--->warn $errors{$Rec->error}; --->--->} else { --->--->--->foo($Rec->a, $Rec->b); --->--->--->baz( --->--->--->--->origin => $Rec->origin, --->--->--->--->destination => $Rec->destination, --->--->--->--->widgets_per_second => $Rec->widgets_per_second, --->--->--->--->score => $Rec->score, --->--->--->--->email_address => $Rec->email_address, --->--->--->); --->--->} --->} } As you can see, indentation that is used to "line up" elements on adjacent lines uses spaces, while indentation that is used to indicate some structural heirarchy in the code uses tabs.
Added a hack to get around Netscape 7.1 bug with onChange event handler not being called when an upload file has been selected.
Fixed a bug that would cause step() to produce an error when called on a constant value. Also, added fact() function that was defined in Algparser but not in Parser (which uses x! notation).
Added missing "step" function that was defined in the AlgParser but not in the Parser. Be sure to copy the updated PGanswermacros.pl to the pg/macros directory.
Make List("1,2,3") work like List("1","2","3") rather than produce a list with one element that is a list.
Added postfilter to Parser-based implementation of NUM_CMP so that the student's answer is updated to be the result of evaluating the answer (when there is no error in evaluating the answer). This correctly reflects the behaviour of the original NUM_CMP.
Fixed typo that caused hilighting of the position of errors to be lost.
Updates to make mode=>'frac' properly emulate the original num_cmp behavior (it now allows decimals and fractions instead of requiring a fraction). There is also a new LimitedNumeric-StrictFraction context (not currently used) that disallows decimals and requires fractions.
Folded in Mike's changes for status messages.
Update to match revision in database structure (chapter and section tables).
Sort course names without regard to case.
Updating the user interface. The checkbox to include webwork administrators in s a course is now on by default. The default templates course to copy when creating a new course can now be set in global.conf. This is the course that automatically comes up by default in the pop-up menu.
Make "modelCourse" the default course to use as a model when creating a new course. The contents of the templates directory of modelCourse is copied into the templates directory of the new course.
Changed unordered list to ordered list.
User interface changes added. All courses are sorted without regard to case. The main page now lists all available courses and their database type -- finding the database type slows things down a bit, so this might not be a desirable feature when there are many courses. It also discovers missing course.conf files. If the course.conf file is missing then it's more likely that the database type is not accurate.
Added useful links to the macro list and the pod_docs in addition to the incomplete manpages. These are still temporary measures for improving the documentation for those writing problems.
I've changed errorOutput($error,$details) to accept a reference to a string or to an array for $details. These are automatically converted to the proper form. References should be used when the $details points to a large number of bytes, such as the contents of a file. This version is not faster than the original method where $details was always a string, sometimes a very long string. It does seem to save memory however. Further savings in memory could be obtained by print directly, but there are a few instances which call errorOutput and then do further formatting before printing. At the moment it doesn't seem to be worth it to make the change from return to print.
Fix glitch in keeping menus in sync in advanced search panel, and deal better with undefined parameters.
Backing out of the changes just made for a moment. I've discovered that making this switch: CGI::p(CGI::code($details)), to CGI::code(CGI::p($details)), speeds things up immensly. (From 165 seconds down to 12 seconds on the example I'm doing.) Even without any other changes. Since the other changes complicate things a bit, I'll put off adding the ability to have $details be a reference. It's possible that allowing $details to be passed as a reference is a good idea anyway, on general principles. I want first to see if it makes a difference in terms of memory consumption.
When print error output errorOutput($error, $details) allow $details to be a reference to a string or a reference to an array. This may not make much difference when the details are short, but it can make a very large difference if the details are long.
Make sure that the timers flush after every print . :-)
More improvements on library - advanced panel. Still a work in progress.
Fix use of $SIG{__WARN__} and $SIG{__DIE__}. * Each change to $SIG{__WARN__} and $SIG{__DIE__} is now dynamically scoped with "local", rather than changing globally and then restoring at the end of the block. * The special value "DEFAULT" is used instead of sub {CORE::die(@_)} or sub {CORE::warn(@_)} when preparing to eval STRING code. * Where $SIG{__WARN__} and $SIG{__DIE__} are overridden to do preprocessing with PG_errorMessage, the previously installed handlers will be called instead of the built-in warn or die functions after preprocessing occurs. (For example, the warn and die handlers defined in Apache::WeBWorK or the warn handler defined in WeBWorK::PG will be called.) * The behavior in process_answers is modified so that the custom handlers are installed once before the answer evaluation loop. This causes them to be in effect during the setup/teardown code, but I don't think this will be a problem.
Fixed minor glitch from problems not associated to any textbook.
Added advanced search panel for database library. Still more features to come.
Adding final problems for modelCourse
adding setDemo files to modelCourse
adding more files to make modelCourse conform with hosted.webwork version
updating modelCourse to conform to hosted.webwork
Updating modelCourse to conform to the version currently on hosted.webwork
Correcting version of modelCourse to bring it in line with the model course currently on hosted.webwork
Adding template contents to modelCourse
Added a missing start_form and hidden authentication. These had been dropped in a recent revision. This closes bug #806
Fixed bug for problem library version 2 - now it can select problems from all sections, or all chapters and all sections, etc.
Changed column label of Id to Login Name to be consistent with other pages. Also aligned the headers to top, which looks nicer if needed for a narrow browser window.
More changes for problem library version 2: changed interface for getting lists of problems so variable amounts of data can be passed. Also removed an unneeded button.
More changes for problem library version 2.
Changes for problem library version 2 to support recent change to setmaker.
Mainly improvements for problem library version 2. Also removed comments and added "Edit it" link back in for library problems. These were not the only read-only problems in a course, and being able to Edit it, and then save as is pretty useful.
Initial support for version 2 of the problem library.
Update to support version 2 of the ProblemLibrary.
Preparing for upgrading webwork part of problem library code. Adding a variable for version so we can maintain backward compatibility.
Update Scoring.pm to deal with versioned (gateway) sets. For sets with assignment_type of 'gateway' or 'proctored_gateway' we report the user's score to be the score s/he attained on her or his most successful version of the set.
The two middle parts of the top area really go together, so the line between them is now less emphatic.
Lots of indentation fixup, and started adding code for new and improved problem library. Still compatible with current "Problem Library".
first steps towards an SQL-specific version of DB.pm. I'm not quite sure how I'm going to proceed on this. We tried too much abstraction, but I don't want to end up with not enough abstraction, either.
Add browsing by set definition files. It will do a full search for these files, and do some work to find the actual pg files. Also, a minor fix in the lists of sets in the current course (the "Select ..." line was being added twice in some cases), some indentation fixing in the souce, and renamed a variable. Long ago, SetMaker used set definition files, and then that was replaced with database lookup but a variable still had setdef in its name. Now that it uses both, this needing fixing.
Adding experimental modules which support Preflight
Made listVariables and listFormVariables synonyms for listing all variables available to the problem.
Say something useful if there is an error when creating a new set. Also fixed some indentation.
Redo change allowing . in set names.
Rearrange top panels (change really from Bill Z.) plus some tiny cosmetic changes.
Made comparison safer when turning blank fields undefined (some are already undefined).
Fixed bug #781 and #783. Mostly involves editing the message given instructors on the Grades.pm page.
Add a check box that determines whether the csv entries are padded with spaces. Padding with spaces makes the text easier to read but it interfers with some spread sheets which expect the csv entries to contain no extraneous spaces. We are still not using the CPAN standard CVS input/output mechanisms. The code is in this module but it is not being used. -- Mike
Added a modification of the grades that shows where the state_summary_msg can be added. This message is printed at the bottom of each problem page. The current default is a blank message, which means that the default message defined in Problem.pm is printed. There is currently no way to turn the message off entirely. Perhaps on the next revision.
Fixed error that kept the script from working on courses whose names contained an underscore. Added ` ` around course names to handle courses whose names have hyphens in them (and other weird characters) Added print comments so that you see a running commentary of what is being changed. Once this script is debugged we might want to turn these off.
Changes to the reports of a problem status. This closes bug #631. It also reports blank errors differently from incorrect answers to support sequential problem graders. Finally it adds a "state_summary_msg" field to the problem state which can be used to completely replace the report on the current problem state usually printed at the bottom of a problem page.
Added a ResultsAlert style ot ResultsWithError and ResultsWithoutError. I am using it to color yellow a message alerting a student to the existence of unanswered questions within a problem.
changed default paths from /usr/local to /usr as per old email: On Aug 24, 2004, at 11:23 AM, Arnold Pizer wrote: > In the tarball for WW 1.9 I reset all paths to /usr/bin/ (rather than > /usr/local/bin which FreeBSD or at least Hoss uses). That way things > work out of the box for most linux systems (all that I have played > with). I think it would be a good thing to do with future releases on > WW 2. Sounds good to me. -sam
Add command-line utility to update sql and sql_single databases to include gateway fields. Use: wwdb_addgw [-h] [sql|sql_single] Adds fields to the set and set_user tables in the WeBWorK mysql databases that are required for the gateway module. The script prompts for which courses to modify. Adding gateway database fields to existing courses should have no effect on those courses, even if they are running under a non-gateway aware version of the WeBWorK system. (I haven't rigorously tested this.) If -h is supplied, the script hides the mysql password when it prompts for it (this assumes that a Unix based stty -echo works). If sql or sql_single are supplied, they become the default database format. Note that this has been tested, but not rigorously. Please let me know if you find that it does not perform as advertised. It might be wise to back up the database tables before using, and to check that it does what we expect (that is, adds columns to the set and set_user tables) after running it.
Added documentation for macros used in constructing sequential problems.
Macros that aid the construction sequentialProblems. For these problems certain sections of text are hidden until earlier answers have been answered correctly. -- Mike
Added support for sequentialProblems.
Fixed typo related to useBaseTenLog.
Fixed typo.
In the login log, this will get the host's name if apache has been configured to do that, otherwise it should get the ip number, and if that somehow fails, we note it in the login log instead of to the user.
When putting entries into the mysql database, put in "" as NULL. The counterpart when retreiving values (that NULL is converted to "") is already part of gets.
If HostnameLookups is off in Apache's httpd.conf, then remote_host returns an undefined value. Better than this fix would be to use get_remote_host, but I couldn't get that to work on my system.
Correct commit of file with unresolved conflicts.
Add gateway template to templates hash.
Preliminary commit of changes to add Gateway module. This adds to WeBWorK - the ability to create versioned, timed problem sets ("gateway tests") for which all problems are displayed on a single page ("versioned" means that students can get multiple versions of the problem set), - the ability to create sets that draw problems from groups of problems, and - the ability to create sets that require a proctor login to start and grade. Sets can be defined as gateway tests or proctored gateway tests from the ProblemSetDetail page. Not quite bug-free yet. Known bugs include handling of problem values on the Student Progress page (I think this may be a problem with changing from sql database format where all entries were 'text' to sql_single in ver 2.1, where they are integer), and a division by zero error on the grades page (which may be the same problem). Tests with a number of attempts per version greater than one haven't been carefully tested, nor has scoring of gateway tests.
Test commit prior to initial full commit of files for addition of the Gateway testing module. (CVS reports that Authz.pm has changed, but unix diff shows no changes, so this is testing if CVS will actually register a change to the file.)
This file implements an easy way to add functions that are defined within the Parser's Context. See the comments in the file itself for documentation on how to use it.
Wrong correction in the previous commit. Use CODE::push
Made modifications that allow use of complex numbers in matrices. You can also LR decompose a non-square matrix. Documentation is still needed and further testing.
Made modifications that allow the use of complex numbers in matrices
Make error messages potentially localizable (by making them use sprintf-style strings rather than variable subtitution).
A first pass at making parser error messages localizable. The Context()->{error}{msg} hash can be used to specify translations of the standard messages. For example, Context()->{error}{msg}{'Division by zero'} = "Don't divide by zero, dude!"; Context()->{error}{msg}{'Function '%s' has too many inputs'} = "You passed too many arguments to '%s'"; (I didn't translate into another language, here, but you could do that, too.) The msg hash could also be used within answer checkers to make certain answer messages more appropriate for the given type of expected answer.
Fixed various perl compiler warnings (due to extra "my", and so on).
Fixed typo.
Fixed problem with minus signs in formulas that are turned into perl mode. Perl needs extra spaces to avoid problems with -e type operators.
added login logging and site_checkPassword support. closes bug #729. see that bug for more information.
added login log.
Fixed typo in installation instructions.
Added some pod documentation to this file. It needs more -- several methods of MatrixReal1 have been overridden
Make tth use unicode for the preview (as it does for the calls within the body of the problem). Also, do the preview in display mode, but fix the tables so that they won't have unwanted borders (really need to fix the ur.css to get this right) and remove the unneeded initial <BR> that tth produces.
Added some pod documentation
chech tthPreamble path and mtime to deal with changes to the file between runs. this is necessary now that dangerousMacros.pl is cached. Closes bug #798.
A couple of other problem set -> homework set changes.
renamed "problem set" to "homework set" in page content. closes bug #797.
Added support for the tthPreamble.tex file. The effect of this code is the same as the corresponding code in dangerousMacros.pl:tth(), but the technique is slightly different. This is a hack. Eventually, we'd like to have a common out-of-sandbox method of calling TTH. Closes bug #799.
fixed tiny indentation problem
Fixed incorrect method call to SaveHiidenFlags (should have been HiddenFlags).
Don't load Parser.pl (it causes trouble with the Matrix.pm module). We only needed it because of the calls to Real() that were being used by Formula objects, so have them call Value::Real directly. be sure to get the latest versions of Parser and Value (including the top-level Parser.pm and Value.pm) in order to use this update.
Modified the perl() method to make calles to Value:: directly rather than to the main:: stubs for creating Value objects. This will make it work better from within packages or when Parser.pl hasn't been loaded. A few things still won't work in this case; e.g., calls to Closed() for intervals (these could be handled better using ->with()) and to functions like Factorial and log10 that are defined in Parser.pl. Finally, there should be better object-based control over what routines are called to create these objects, so that subclasses of the Value objects will be able to be generated correctly.
Modified formatting
Main file that calls in the legacy modules.
Add comment
Folded in Mike's changes to checkbox_cmp.
This is an attempt at making the traditional answer checkers call the new Parser in place of their original ones. That is, if you follow the instructions in the README file, then problems that use std_num_cmp(), fun_cmp(), etc. will really be using the new Parser instead of the original PGanswermacros.pl versions. The old answer checkers are still available, and can be switched back on a site-wide, course-wide, or problem-by-problem basis. See the README for details.
Rewrote checkbox_cmp as an AnswerEvaluator
Reworked some of the code for AnswerEvaluator The messages printed out when using the debug flag should now be somewhat better. -- Mike
Fixed problem with sorting (problem with $a, $b, I think).
Handle TeX versions of variables whose names include underscores better.
Better messages when adaptive parameters are too big.
Implement "remove trailing zeros" format, like in prfmt(). I still think '%g' works better in most cases ('%f#' will print larger values without using scientific notation, which is nice, but will print small numbers like .000000005 as 0, even though the fuzzy comparison of this to zero will not be true.)
Commenting out unused code. This file still needs a lot of work.
Don't use the overloaded Real class for doing adaptive parameter checks (use non-fuzzy checks, since we are checking the fuzziness by hand).
Restored str_filters -- removing it broke some of the other answer evaluators. str_filters takes a string, filters it and then returns the filtered string. The actual filters have been changed to work with answer hashes rather than with strings, so str_filters warps the string in an answer hash before sending it through the filters. sorry for the breakage. -- Mike
Better spacing of jsMath output in the answer preview area.
Change so as not to use raw HTML in the error messages.
Allow Parser::Number::NoDecimals() to accept a context to be modified (rather than always changing the curent context).
Updates to allow string matches to be case-insensitive. This is now the default, and can be overridden in the Context by setting the string's "caseSensitive" attribute. e.g.: Context()->strings->add("FooBar"=>{caseSensitive=>1}); would rewuire "FooBar" to be entered exactly as typed.
Adjusted some spacing
Fixed a bug in the enable/disable routines that would cause them to always work on the current context rather than the one whose enable/disable method was being called.
Fixed an error in creating the tarred archives (I had messed it up when adding the report of how many files were archived).
Major updates to the file manager to allow it to: 1. Show dates and sizes of files (optionally, since some browsers don't handle the CSS to change to a monospaced font). 2. Provide better control over renaming of uploaded files whose names already exist (there is a checkbox for overwriting them automatically; if unchecked, the user is prompted for a new name). 3. Allow the creation or gzipped tar archives from files in the course directory. Multiple files and directories can be selected to be included in the archive. If only one file is selected, the archive will have it's name with ".tgz" appended; if mulitple files are selected, the archive will get a unique name starting with the course ID. 4. Provide a checkbox that controls whether uploaded .tgz archives are unpacked automatically, and a second that controls whether the unpacked archive file is deleted afterward. Files from the archive will be unpacked into the current directory, and will overwrite existing files silently. 5. Follow symbolic links that are to files or directories within the course hierarchy. In addition, there is a new variable in global.conf that provides a list of "valid links"; these are directories to which the FileManager is allowed to follow symbolic links. The system administator can add directories to this list in order to allow professors to access limited areas outside their course directory (but they still need to have a symblic link within their course to those areas in order to view them). I think this covers all the current FileManager requests, and this closes bug#791.
Moved the task of sending the emails to the students to a post_processing portion of the request handling. When you email a class, an HTML message is returned informing you that the messages will be sent. Once the process is completed an email notification is sent to the user (instructor) sending the email. This has been lightly tested.
Added commment
Fixed a bug in which the constant 'function' BASE64_ENCODED was not being evaluated inside the matching and substitution statements. Replaced the constant by using the construction our $BASE64_ENCODED = 'base64_encoded:'; instead. The variable is properly interpolated inside the matching and substitution statements.
Added comments.
Fixed bug in radio_cmp closing bug #258. We now check to make sure that only a single string is being passed and not an array. (The latter occurs if checkboxes are used instead of radio buttons.) The presence of two checked checkboxes triggers a warning.
MASSIVE changes to str_cmp and related subroutines (mostly in STR_CMP). This answer evaluator now produces an AnswerEvaluator type rather than a subroutine.
Corrected how preview_latex_strings are handled when two AnswerHashes are ANDed or ORed.
Fixed a problem with showing answers when printing hardcopy (no idea why this wasn't reported earlier). The CGI::checkboxes use "on" and nothing to denote whether a checkbox is checked. We expect 1 or 0 (or undef).
Format changes.
Many changes to this file. I've fixed multi_cmp which will check a comma separated string of answers. I have commented out many other routines which do not appear to be in use.
set closed message differentiates between sets that have not yet opened and sets that used to be open. resolves bug #724.
fixed comment about port number to describe new >= 8000 numbering scheme
Removed warning message about "users" . We closed the bug defining multiple users awhile ago so we don't need this anymore. It's causing trouble with UserList.pm which now has fields visible_users and prev_visible_users.
Fixed an incorrect error message when using the revert button.
Fixed conceptual error in compare_vec_solution. This should fix bug #670. In my opinion the entire concept of vec_solution_cmp should be reconsidered. In solving an underdetermined linear equation of the form Ax-b=0 it seems to me that the solutions answer in the form: x= a +bt+cu+ds where a,b,c,d are vectors should simply be evaluated to see if it satisfies Ax-b=0 for 5 or six values of a,b,c,d -- checking the solution should use a vector valued version of fun_cmp. As it is, the student's coefficients for a,b,c,d are compared with the instructors to see if they span the same space. This is quite a bit more complicated -- and indeed the method came up with the wrong answer. I believe I have the method corrected, but I would suggest that this answer evaluator be replaced with one which operates more directly and is therefore easier to maintain. Am I missing something in this analysis? Has someone else created answer evaluators for this type of problem? -- Mike
When sorting by clicking a label, concatonate visable user id's into a string so that more my be sent without exceeding MSIE limit on URL's Arnie
The TIMEOUT constant which is now defined in WeBWorK::Cosntants and is (and was) used in WeBWorK::PG::Local gives the time in seconds that is allowed for rendering one PG problem. The old value was 5 minutes which was probably way too long. The default in WeBWorK::Constants has been set to 60 seconds. If no value is set then 10 seconds is used. -- Mike
Tweaked documentation
Additional changes to the writeLogs functions. Now surePathToFile is used to make sure that the logs are created if they are not already there.
Resetting Timing::Logfile to empty. I have left the default value for dvipngArgs so that it works with dvipng versions greater than 1.0
Use the Timing::HiRes module to calculate timing data for each request. This gives more accurate timing data (using the unix time gives only to the nearest second). I am printing the elapsed time to 3 decimal places, it could be to 6 if that is desirable. This will help us evaluate whether changes are increasing or decreasing the speed with which requests are serviced.
Added documentation to writeTimingLogEntry
New context which allows students to use C(n,r) and P(n,r) in their answers. To support this, the webwork versions of these functions have been moved from PGaux... to PGcommon...
Put in hacks to get around: Maximum URL Length Is 2,083 Characters in Internet Explorer. When sorting by clicking labels we use the GET method and send the user_id's of the visable users so that we only sort visable users but for over about 110 students this is above MSIE's limit. If the total URL is under the limit we will pass visable users. If it is over, we will not pass any and all users will be displayed. The is almost enought to amke me use FireFox. Maybe we should replace the GET method by POST but that requires a greater change. Arnie
When exporting classlist to a file, tell the user the name and location of the resulting file (e.g. templates/math1.lst) so they can find it in the File Mannager Arnie
The classlist data can now be sorted by clicking on headings.
Allow access to new file comparison module. It is not linked to from anywhere, but now you can bring it up with http://server/webwork2/coursename/instructor/compare
New module for comparing two pg files in webwork. You get both rendered versions of the files and diffs. This initial version is pretty much just bare-bones.
Sorting by permission now works.
New flag showAllErrors for when a custom checker is supplied. This will cause all errors generated in the user's code to be reported (normally, messages from the Value and Parser packages are ignored).
Fixed typos in comments.
Fixed a problem with auto-generated functions getting an incomplete variable list.
Fixed documentation for $graph->size()
Implements a Parser context in which only polynomials (of a single variable) can be entered. Only sums of multiples of powers of the variable are allowed to be entered (though the coefficients can contain mathematical operations). An optional flag lets you specify that only one term of each degree is allowed, so the student would have to combine 1+x+x+x^2 to get 1+2x+x^2 in that case.
Added separate file for rendering operation
Cosmetic change to pretty_print_rh
Changed whitespace removal of TeX strings to safer version.
This change affects course creation using mysql. Field types are now determined by DB/Record/*.pm in the function SQL_TYPES. Key fields which are text are set to binary types (blobs) so that indexing on those fields is case sensitive. The net result should be fast database access while still having it be case-sensitive in the searching.
Added the ability to change passwords on the classlist page and fixed up sorting a bit. For example commented out sorting by permission which didn't work. I'll work on sorting next fixing the above and allowing profs to sort by clicking on heading as on the Student Progress page. Arnie
Bringing HEAD and rel-2-1-patches in line
Bring HEAD and rel-2-1-patches in line with each other.
This file can contain a system wide message. It is displayed on each login page. It's location and name are specified in global.conf
Corrected usage help message
Fixed Disable() and Enable() so that they can be called as Context()->functions->disable() and Context()->functions->enable() as well as Parser::Context::Functions::Disable() and Parser::Context::Functions::Enable() The former is the preferred syntax.
Forgot to check hardcopy mode. Fixed some problems with that. The answer array items have to turn off verbatim mode that is used when answer are included in the hardcopy. This causes paragraph breaks between entries in a singleResult MultiPart that includes ans_arrays, which make the output less pretty, but at least they show up.
Added styles to make Parser's ans_array methods show up properly in the student answer and correct answer blocks. The style for the td in the results table causes havoc for tables that are nested in there. This solves is for Parser produced answer arrays, but it is still messed up for the standard ans_array() and for the output of tth (the formatted text option). The way the style for this table is handled should probably be changed. Perhaps if we could override for td's in tables nested in the results area? I don't know enough about CSS to figure that out.
This file implements a Multi-Part parser object that allows you to tie several input blanks to a single answer checker that can compare the student's answers in several blanks in order to determine which are correct. For example: $mp = MultiPart("x^2",1,-1)->with( singleResult => 1, checker => sub { my ($correct,$student,$self) = @_; # get the parameters my ($f,$x1,$x2) = @{$student}; # extract the student answers Value::Error("Function can't be the identity") if ($f == 'x'); Value::Error("Function can't be constant") if ($f->isConstant); return $f->eval(x=>$x1) == $f->eval(x=>$x2); }, ); . BEGIN_TEXT \(f(x)\) = \{$mp->ans_rule(20)\} produces the same value at \(x\) = \{$mp->ans_rule(10)\} as it does at \(x\) = \{$mp->ans_rule(10)\}. END_TEXT ANS($mp->cmp); This produces three answer blanks all tied to the same checker, which is supplied by the user when the MultiPart is specified. This one checks if two inputs to a function provide the same output. The answer blanks can each produce a separate row in the results area at the top of the page, or they con be combined into a single row, as in this case. The checker routine can provide error messages for individual parts via the setMessage() method, or for the problem as a whole, as above. Finally, the ans_array() method can be used to produce answer blanks for individual entries for those objects that support such arrays. See the documentation at the top of the file for additional details.
Added ability to have Matrix, Vector and Point objects produce input arrays similar to the ones available in PGmatrixmacros.pg. This provides some substantial new functionality, and it may still have some shaking down to do, but it should not affect the existing functionality of the answer checkers. To create an answer array for a matrix, vector or point, use the new ans_array() or named_ans_array() methods of these objects. For example: Context("Matrix"); $M = Matrix([1,2],[3,4]); BEGIN_TEXT \{$M->TeX\} = \{$M->ans_array\} END_TEXT ANS($M->cmp); This creates a matrix, then prints it ans creates an answer array of the appropriate size for the matrix. The answer checker will automatically know to handle the multiple entry blanks. To used a named answer rule, use: Context("Matrix"); $M = Matrix([1,2],[3,4]); BEGIN_TEXT \{$M->TeX\} = \{$M->named_ans_array('fred')\} END_TEXT NAMED_ANS(fred => $M->cmp); Both methods also take an optional argument that specifies the width of the answer rules. The default is 5. You can get a multi-input point or vector array as well, and you can make column vectors as follows: Context("Vector"); $V = ColumnVector("1+x","3x","1-x"); BEGIN_TEXT \{$V->TeX\} = \{$V->ans_array\} END_TEXT ANS($V->cmp); Note that you can make answer arrays for matrices and vectors of formulas as well as constants, provided the formula is an explicit matrix or vector of formulas, and is not obtained by matrix arithmatic. For concistencey, all objets now have ans_rule and named_ans_rule methods as well. The default width is 20 for these.
Removed some unused lines and comments. Removed unnecessary spaces from around answer-rule-extension rules, and made the TeX version of this rule be based on the width, as is the case for ans_rule.
Allow for vectors to be marked as Column Vectors.
Better handling of delimiters that are explicitly set byt he user. Fixed an incorrect call during object class promotion. Added ability to sepcify that a vector is a Column Vector.
Better handling of open and close delimiters that are explicitly set.
Fix some incorrect calls when the promoting types to higher precedence object types.
Fixed a bug with Matrix->perl() method that would cause an extra level of nesting in constant matrices.
Fixed typo
Avoid possible infinite loop with length and typeref calls.
Remove unneeded comment.
Added a ->with() method that lets you set fields of a Parser object as you create it. For example: $f = Formula("sqrt(x)")->with(limits=>[0,3]); or ANS(Formula("(x+1)/x")->with(checkUndefinedPoints=>1,test_at=>[[0]])->cmp); or ANS($f->with(test_points=>[[0],[1],[2]])->cmp);
Better control over number of points that can be undefined, and new ability to specify required test points plus additional random ones. (Previously, if you set the test points, no random points were generated.) For example: $f = Formula("(x^2-1)/(x-1)"); $f->{test_at} = [[1]]; # test at x=1 plus random points as opposed to $f->{test_points} = [[-1],[0],[1]]; which tests only the points x = -1, x = 0 and x = 1.
Modified the Formula answer checker to allow checking of points where the functions are undefined (i.e., attempt to check that the domains agree). This can be enabled by setting the checkundefinedPoints flag in the Context(), or in the formula itself. Test points where the function is undefined will be retained and the student's answer will have to be undefined at the same points. If the points are selected at random, the points where the function is undefined are kept in addition to the ones where it is defined, so the required number of test points where the function IS defined will still need to be found. The number of undefined points can be up to the number of defined points. This number can be reduced by setting the max_undefined flag. If you want to guarantee that a specific undefined point be tested, you can provide that point using the test_points field of the formula. For example: Context()->flags->set(checkUndefinedPoints=>1); $f = Formula("(x^2-1)/(x-1)"); $f->{test_points} = [[-1],[0],[1],[2]]; ANS($f->cmp); will guarantee that the singularity at x=1 is tested, so the answer x+1 will not be marked as correct. If an answer matches at all the test points where the functions are both defined, but some of the undefind points differ between the two functions, the answer checker will generate an error message indicating that the domains of the functions don't agree. (This is ONLY generated with the functions match except for that.) This can be controlled by setting the showDomainErrors flag in the formula's cmp() call: ANS($f->cmp(showDomainErrors=>0)); The default is to show these errors.
Fixed an accidental hard-coded operation from always being "add" to being the correct operation when promoting the operations to an object of higher precedence. (But since formulas are normally the highest precedence, this will never have occurred.)
Make all sorts case insensitive
Allows connection of WeBWorK with Moodle via SOAP. This feature is still under development.
These two files provide a connection via SOAP with Moodle. You will need to modify the webwork.apache-config file as well.
1. Don't put any spaces before any numerical data in .csv output. Excel doesn't have a problem with this but other spreadsheets do according to Mike. 2. Keep backups of all totals files and never overwrite a backup. The File Manager can be used to delete any unwanted backups. Arnie
Add the line Any changes made below will be reflected in the set for ALL students. to the top of the Hmwk Set Editor page Arnie
Sorting to three levels is obtained by clicking on headings. Arnie
test of logging
start using activitymail-from script again
Allow periods in set names. This has been tested for a while without ill effects. Such sets already exist - they can be created in the Library Browser, but when they were exported, they could not be re-imported.
On web page, display a pretty sort_mthod_name. E.g. remove underscores. Arnie
pad entries with appended (rather than prepended) spaces so that sorting will work properly in Excel, etc. Arnie
The sorting order in scoring files is now never random. It is by last name, then first name, and then by user_id and is case insensitive. Before it was by last name only and case sensitive. Arnie
changed a substitution call so that the directory path is recalculated every time listLib is called. Before the substitution pattern was calculated only when the child first started up and this caused bad problems if a new call to listLib had a different library than the one used when the child was initialized. -- Mike
Allow sorting by first name, last name, or email address. Also default sorting is by last name, then by first name, then by user_id where as before it was by last name only.
test of logging
We're waiting on Hoss to recover the /usr/local/bin/activitymail-from script from backup. In the mean time, I've set the from address to email@example.com, which is allowed by SourceForge.
(1) problem numbers are left alligned (2) problem values are listed (3) no special message is given if problem value is 0
This is the model course that we use as a template to create new courses on the development machine.
Added a location for site_info.txt
The info section of the login picks up HTML text contained in the webwork2/htdocs/site_info.txt file. This allows a site administrator to post a message of the day or urgent site information which is read by everyone logging into webwork. The contents of the course/templates/login_info.txt file is printed after the site_info.txt message.
Modifications that support import and export to gzipped disk files
Import and Export now create gzipped files in the template directory of the admin course. These files can than be downloaded using the FileManager. The export and import process are still VERY slow, but at least it no longer matters if your browser times out.
Fixed problems with calculating the average grade correctly. Regularized the code in Stats and StudentProgress the next step is to a good chunk of the code which does the actual arithmetic to a spot in Utils/ so that it can be called by both Stats and StudentProgress. This fixes bug 784
Use base64 to save answers -- this ensures that symbols in the answer won't cause trouble. I have added a string to the beginning of the encoded passage: base64_encoded:AFDWERADADFRET -- Mike
useless commit to test logging
Committing a new xmlrpc client to replace xmlrpc_client4
Add a stub to allow SOAP access to webservice
Clean up commented out code.
I've updated the clients so they work with the current configuration of the apache server running in my directory (http://devel.webwork.rochester.edu:8002) Once the webwork.apache-config files have been updated they should work on other systems that are up-to-date with the cvs. -- Mike
Put a spce in after bolf faced words
Changed loadMacros() to use search for amcros files via a user-cusomizable path of directories. This is specified in the global.conf file, and can include any number of directories. The path can include "." to mean look in the .pg file's directory. This makes it possible to store special macros files with the code that uses them. By default, the path is ".", the course/templates/macro directory, then the pg/macros directory (in that order). This duplicates the current behaviour, except for the ".", which is new. You must also make the updates to the global.conf, webwork2/lib/WeBWorK/PG.pm, and webwork2/lib/WeBWorK/PG/Local/pm files.
Changes needed to make loadMacros() look through a path of directories rather than just course/templates/macros and pg/macros. You can specify the path in the global.conf file. You also need to make the update to pg/macros/dangerousMacros.pl
encoding answers in base64 -- this should keep import and export from breaking.
Allow library search to follow links. This is needed since the initial path to a library from a course is usually a link from the templates directory.
During a call(), if the evaluation produced an error message generated by Value::Error, report it, otherwise report a generic message.
Changed the call method to check if the function is actually defined inthe parser before calling the parser method. This allows things like C(n,r) to be moved here but not automatically included in the Context.
Added derivative of |x| as x/|x|.
Fixed a bug with adaptive parameters where the relative tolerance was not being properly computed. This allowed large constants to be treated as correct when they shouldn't be.
Copy parameters like limits, etc, to the newly created formula when 'C0' is added by the "upToConstant=>1" option in formula cmp().
Use correct form of "x" with lists (rather than hack using split()).
Providing an initial fix for bug 784. I'd like to continue to work on this module and factor out some of the calculation loops in order to place them in Utils. For now this hack (which involves splitting $num_of_attemts into two variables so it can be updated and used for two different purposes) should work. --Mike
Provide a default warning subroutine if none has been defined.
Updating the webwork daemon. Small changes that make the url compatible with the current ports that we are using. --Mike
Bringing this client up-to-date with the current version of the xmlrpc daemon. -- Mike
Added utf8 to the modules called to set up AlgParser. Davide Cervone found this fix which corrects bug #754
Added a check that the coordinates are numeric. This avoids an error were <i+j+k> was accepted as OK.
Adding sql types for database entries for use on creation. Many of them can probably be tweaked to take up less space (e.g., we don't need 4 bytes to store the published information).
Provide an easy means of generating a custom answer checker based on an user-supplied subroutine. Most of the work is done by the Parser's answer checker framework, and the user's routine is called at the point that the student's answer is compared to the correct answer.
Handle error messages in the list checker better. In particular, make the error messages generated by custom checkers called on elements in the list look better. Also, in an ordered list, if the student enters extra values, call an answer checker to do a syntax check. (By default, use the first element again, but the user can supply a separate object to use for the checker using the extra=>object option.)
Compartmentalize the equality check one step further. The cmp_equal method now calls a new cmp_compare method to perform the actual comparison (rather than use == directly). The cmp_compare method either calls a user-supplied checker routine, or defaults to using the == operator. The list checker also uses cmp_compare to check the individual items in the list. The list checker also calls a new cmp_list_checker method to perform the list check. This can be overridden by a user-supplied list-checking routine. To supply an alternate checking routine, use the "checker" option to the cmp() method of the correct answer object. For example: sub check { my ($correct,$student,$ans) = @_; return 0 unless $correct->length == $student->length; my ($x,$y) = $student->value; # break up a point; return $x**2 - $y**2 = 1; # check if it is on a hyperbola } Point(1,0)->cmp(checker=>~~&check); This will check if the student's point lies on the given hyperbola. All the usual error messages will be issued if the student's answer is not a point, or is of the wrong dimension, etc. You can use sub list_check { my ($correct,$student,$ans) = @_; my @correct = @{$correct}; my @student = @{$student}; ... return ($score,@errors); } List(...)->cmp(list_checker=>~~&list_check); to replace the list-checking routine with your own custom one. The $correct and $student values are array references to the elements in the lists provided by the professor and student. (Note that you do NOT get a List() object; this allows you to handle lists of formulas, since a List of formulas becomes a formula returning a list). The checker routine should return the number of correct elements in the student's list ($score), and a list of error messages produced while checking the two lists (@errors). (This is a list of messages, since you might want to include an error for each entry in the list, for example). If your checker or list_checker routine wants to die with an error message, use Value::Error(message). This will put the message in the WeBWorK display area at the top of the page. If you use die(message), or if the code fails due to a runtime error, then "pink screen of death" will be produced indicating the error and asking the student to report the error to the professor.
Properly handle string values in postprocessing of vectors and other related lists. (It used to report a dimension error for things like 'NONE').
Peroperly negate infinities even when reduceConstants is not in effect.
Handle extra parentheses better.
Handle log as ln or log properly.
## Make lookups case insensitive. Otherwise indices seem not to be used which slows things down drastically. See email@example.com discussion.
*** empty log message ***
Implements an experimental answer checker for implicitly defined curves and surfaces.
Corrected display error where negative numbers were enclosed in parentheses.
Fixed sign error in correct answer, and chamged f(x) to f(x,y) in the statement of the problem.
Implements an answer evaluator that checks if a students answer satisfies a given equality. See the comments in the file for details about how to use the answer checker.
Now that the uverloaded operators handle subclassing properly, we can use promotePrecedence in the compare routines, just in case we define a subclass with even HIGHER precedence!
removed a commented-out line that was no longer needed.
Fixed a typo.
Update the overloaded operators so that they can be overridden by subclasses of the predefined object classes. This involves calling the objects method rather than using a hard reference to the routine in the parent class. Also, change the name of the string comparison routine to compare_string to avoid conflicts with cmp that is used to produce the answer checker for the class. Finally, in Value.pm, promotePrecedence no longer has to do fancy footwork to get "special" precedence to work (this was a hack to get around the misfeature of the overloaded operators -- now that that is being handled correctly, there is no need for it).
Fixed error with asec and acsc where the parameters were not being passed properly.
Added a link from the logo to the home webpage for webwork.
Changed port range to 8000-8999 instead of 11000 to 11999
Still fiddling with the links so that one can jump from instructor page editors to the actual display and back easily.
Allow subclasses of AnswerEvalutor to be used. Check for a match with a substring AnswerEvaluator instead of equality.
Small correction that makes sure that _init subroutines are read properly. The original works on some versions of perl, but not on others.
Missed one situation when making the previous update. Fixed it.
Fixed error in PGProblemEditor.pm that prevented you from adding new problem in a set. Added comment to ProblemSetDetail.pm