text:
Directory Listing
|Sticky Revision:
widen path field of NPL-path table to 4096 to acommodate longer paths. linux's max path length is 4096.
comment re: unused value rh_directories
eliminate 'odd number of hash elements' error when showHints or showSolutions are not checked.
added fake_user, cleaned up formatting, expanded functionality of renderProblems
commented out unused variable
beginnings of lightweight problem renderer
added comments about future exception handling scheme
remove stale pidfiles on stop
Rolling back previous change of "\0 to \0 until further checking is done.
Changed join("\0",....) to join(\0, ....) since I'm pretty sure that what was desired was a string separated by nulls. If one of the items in the list began with a number eg 14 you would get \014....\0name...\0 etc. I think \0name evaluates properly but I'm pretty sure that \014 does not.
Changed references to "feedback" to "email instructor", "cancel email" and so forth for consistency. This was in response to a suggestion by Bob Palais at University of Utah. -- Mike
Fixed bug #1435 which prevented showHints and showSolutions from working. Added -value =>1 to the checkbox items so that they return numeric values rather than "on".
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.
Include aligned and gathered LaTeX environments.
Bring jsMath up to version 3.5. Changes include: * Fixed a problem with the boldsymbol extension where it could leave the fonts set to the bold fonts, so that all the rest of the mathematics on the page would be in bold. (This would occur if a jsMath auxiliary file had to be autoloaded by the \boldsymbol command.) * Fixed a timing problem with easy/load.js when autoloading and tex2math are both used (the default) that could cause some internal routines to run in the wrong order. * Fixed a problem in detecting a font size change in MSIE when the font used at one location on the page is only slightly smaller or larger than that used at the previous location. * Added ability for extra fonts to specify how they are handled in symbols-only image mode. This is used by the cmmib10 font to specify that the italic letters should be handled by bold italic letters in the serif font rather than by images, which was the old behaviour. You will need to replace the jsMath/fonts/cmmib10/def.js file with the new one to take advantage of this. * Added a new autobold extension that allows jsMath to detect the presence of a <B>...</B> tags (or CSS that sets font-weight:bold) surrounding the mathematics and automatically apply \boldsymbol to the mathematics. Since this requires the extra cmmib10 and cmmsy10 fonts, this is an extension that you must activate yourself. See the autobold documentation for details * Implemented the \verb command for entering verbatim material. See the verb extension documentation for details. * Added aligned and gathered environments to the AMSmath plugin. * Added equation and equation* environments. (Since tex2math now processes LaTeX environments within the text of the page, it makes more sense to have these defined.) * Fixed a problem with \newcommand where it would reject control-sequence names that included upper-case letters. * Fixed a problem with the \font command where the control sequence would be lost when the font was loaded (if it wasn't already loaded when the \font command was issued). * Fixed a timing bug with easy/load.js when there are files specified in the loadFiles array. The bug only occurred with the Opera browser. * Worked around a problem with Opera where the autoload plugin could hang when trying to load the jsMath.js file. * Worked around a spacing problem in IE7 where some elements in an array or fraction could be misaligned. * Worked around a problem in IE7 where accented characters could disappear under some circumstances (particularly when they appear by themselves). * Fixed a problem with Firefox3 where the control panel would not open. * Firefox3's new single-origin policy restricts access to file outside the currect directory when local files (i.e., file: URL's) are used. JsMath now uses the new window.postMessage() facilty to work around this. If you use window.postMessage() yourself you should be aware that jsMath is also using window messages, and so you should be careful to properly identify your own messages so as not to confuse them with the ones used by jsMath. All messages used by jsMath will begin with jsMLD:, jsMCP:, or jsMAL: so you can filter these out of our own message-processing code. * Disabled the BaKoMa font processing in Firefox3 since jsMath no longer works properly with those fonts in Firefox3.
formatting fix
For some reason we were distributing GPLv1 rather than GPLv2 -- weird!
Add $feedback_by_section option: # If this value is true, feedback will only be sent to users with the same # section as the user initiating the feedback. $feedback_by_section = 0;
Fixed the name of the transaction log
Bring back the green bar, which some students appear to worship.
(1) require --dest-lib, don't accept "files ... dest-lib" (2) add --check-names to warn if a file name will be changed (3) added --help option, improve usage output
improve error reporting for list parsing
added $mail{smtp_timeout} setting
Add "disabled" previous and next buttons so that a student who clicks on the next button on the first problem and then clicks again (expecting another next) doesn't get "up" by accident.
New images needed for disabled buttons.
Fix dropped last value in problem definition lines when importing from a set definition file.
fixed spelling of received :-)
added check for Exception::Class
Bring jsMath to version 3.4f: * Fixed a problem with the \bbox extension where the sizes of boxed items in super- and subscripts was incorrectly set, and where super- and subscripts for large operators that are boxed might be placed incorrectly. * Version 3.4e arranged for tex2math to recognize \begin{xxx}...\end{xxx} outside of math mode. It incorrectly placed the environment into in-line math mode rather than display mode. This had been corrected. * One more attempt to work around alignment problems with MSIE with a DOCTYPE that triggers "standards" mode. I think I finally found the real problem, and was able to remove several hacks that were not completely effective.
Cosmetic fixes to global.conf Change blankProblem.pg to blankProblem2.pg to take advantage of the new MathObject paradigm in the blankProblem template.
Modified this blankProblem2.pg to use more MathObject techniques. You can make this the default problem template by adjusting the reference to blankProblem in global.conf
actually do the file copies, added --pretend and --verbose options.
use WEBWORK_ROOT to find libdir (not FindBin)
Useful tools for managing NPL-style tags in PG problems. These tools were developed in the course of managing the Rogawski problem library for W.H.Freeman: lib/WeBWorK/NPL.pm - Useful routines for parsing and writing PG tags format as well as the Textbooks file format. Also contains a routine gen_find_tags which generates a "wanted" function for File::Find that finds files that match a certain tags specification. As of now, editing of tags is somewhat limited -- a facility for appending tags to the end of the tag block is given, which should be sufficient for adding a new textbook to existing files. The tag parsing routine is all new, and should be somewhat more robust and harder to abuse. One notable improvement is that it can handle escaped single quotes within values, making it possible to say things like: ## DBsection('L\'Hospital\'s Rule') However, the stricter value parsing makes it reject some broken values already in the NPL. In the case of KEYWORDS, if a parse error is encountered it will fall back on the old keyword parsing method. This could be extended to other values if need be. bin/pg-find-tags - Prints file names for files that match specifications given on the command line. Good demo of how to use gen_find_tags. Can be easily modified to perform other tasks. bin/pg-append-textbook-tags - Appends tags for a new textbook to the end of the tag block in an already-tagged file. bin/pg-pull - Pull files from an existing library into a new library. Directory and file names for the new library can be generated from the tags in the problem (and optionally use the names from a Textbooks file). We use this to pull Rogawski-tagged NPL problems out for separate distribution. This script has some annoying limitations right now -- read the comments.
Added more units.
Added amps to units help page.
support hints and solutions in the library browser
If the system is using mysql to store image depths, we update the database when deleting images. More specifically, we keep a depth in the database iff we kept the image.
Bring jsMath to version 3.4e: * Added ability for the tex2math to find LaTeX environments of the form \begin{xxx}...\end{xxx} outside of math mode. This is enabled by default for jsMath.ConvertLaTeX(), and can be enabled in the easy/load.js by setting the processLaTeXenvironments value to 1 (now the default). * Fixed issues with loading a local copy of jsMath in MSIE. Apparently, MSIE considers xmlHttpRequest calls for local files to be access violations, even when the calling file is also local, and so MSIE needs to use the non-xmlHttpRequest fallback method when loading jsMath locally. * Worked around a long-standing issue with MSIE where elements that are positioned using backwards skips could be clipped in some circumstances. In particular, the Chapter 18 commutative diagram now displays correctly, as do exponents that have been adjusted to the left. This was a vexing MSIE bug that is good to finally have worked around. * Fixed a problem with placement of accents in some situations (the italic correction was not being applied properly). * Worked around bug in MSIE where the \vec vector arrow was being clipped at the right. * Worked around bug in MSIE where \mapsto and \longmapsto were displayed incorrectly (space appeared between the arrow and the tail).
converted to pod
never got anywhere with this, unfortunately
Add webwork image as favicon to the standard distribution. The favicon produces the small web image that appears in the browser's url entry window at the top of the page.
Bug fix. Both the proctored test template and all taken versions of the test were being dropped from the ProblemSets page when the user didn't have the auth level to view proctored tests.
Correct logic error for showing correct answers with respect to hiding scores et al.
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.
Update to version 3.4d of jsMath. * Fixed a problem with easy/load.js where jsMath could fail to run when easy/load.js is loaded at the top of the BODY of the document (rather than the HEAD) and autoload is specified but tex2math is not needed (i.e., autoload is set to 1, while processSlashParens, processSlashBrackets, processDoubleDollars, and processSingleDollars, are all set to 0 and customDelimiters is commented out). * Fixed a bug where easy/load.js could run its onload handler more than once in some browsers. * Fixed a bug in the autoload plugin where jsMath.js could be loaded twice if a call to jsMath.Autoload.ReCheck() is made while the first copy of jsMath.js is in the process of being downloaded. * Fixed a subtle timing issue with jsMath.Process() when some mathematics on the page requires an external file to be autoloaded and there are additional jsMath.Process() calls pending. * Modified the algorithm used by easy/load.js for finding the root when it is not specified so that it will work better with MSIE in the situation where easy/load.js is loaded via a relative URL. * Added \operatorname to the AMSmath extension, which was acidentally left out previously. * Fixed some alignment problems with MSIE when running in "standards" mode rather than "quirks" mode (i.e., in the presence of certain DOCTYPEs).
Added the support files needed for the Union theme (since someone added it to the list of themes without adding the support files). I didn't have a gateway template made up, so I hacked this one together based on the ur page. It is only lightly tested.
Make default setting for view_proctored_tests be 'student', so that students see the link for proctored tests on the set list page.
forward-port (sh002i): Resolve bug #1293 by actually throwing a RecordExists exception from NewSQL::Std.
Extended the set definition file format to support commas in the source_file field (as well was the value and max_attempts fields). Commas are backslash escaped: \, To get a literal backslash: \\
ignore .svn directories in problem libraries (%ignoredir)
Turns out you don't need to add UNIVERSAL to the package list after all. I must have forgotten to restart the server during my testing. Sorry!
Parser needs UNIVERAL package in order to access the can() and isa() methods that are supposed to be part ofthe base class.
Add more indexing, small disk space expense and hopefully more speed.
Textbook chapters and sections will now include their numbers in the library browser, and be sorted accordingly.
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.
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.
Work around IE bug where pressing return submits a form but does not set the submit button's value properly in some circumstances.
Allow unpacking of .tar.gz and .tar files in addition to .tgz files.
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.
updated copyright dates
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.
Revise how institution will be dealt with in the problem library. Currently, the information is not used so the changes are innocuous.
Sort entries which will appear in the library browser (chapter titles, section titles, etc.).
updated copyright date
removed extra newline
back out of pg_dir -> webwork_pg_dir change
restore whitespace destroyed (presumably) by matt's editor
i feel like i've done this several times already, but ok...
When problems are being displayed, add a second "Update Set" button, this one at the bottom of the list of problems.
fixes for upgrading an empty database
APACHE CONFIG CHANGES -- rolling back to previous config method :P
added missing newline at the end of the file
not sure how that guy got in there...
backport (sh002i): set the default value of restrict_ip to No
Add check for NULL restrict_ip fields in the set table to be sure that we don't try to check ip restrictions in that case.
If we allow a user to see a problem rendered in Undefined_Set, then they have to have permission to use instructor tools.
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.
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.
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.
this stuff should be in courses.dist in 2.3 and later
Fix bug in keyword searching caused by not updating the name of related tables in recent problem library database changes.
This script replaces the older loadDB2 for the NPL.
Changed parameters for database access for the problem library. The tables are now stored in the database webwork.
Changes database access: now Problem Library tables are stored in the webwork database.
Fixed WSDL Errors
set local host rpc address and hope that this hardwired url doesn't need to be changed very often. So far the default seems to be correct in most cases.
This seems to be a more stable way to discover the root directory of webwork. For some reason $ENV{WEBWORK_ROOT} is occasionally undefined.
Enhanced error message so that we can better determine the cause of communication problems between webwork and moodle.
Added error message (reported to the httpd log) if $ENV{WEBWORK_ROOT} is not defined. Take care, Mike
Construct additional course environments using %WeBWorK::SeedCE, which will always have all necessary values in it. The old way broke when we moved the definitions of $webwork_courses_* and $webwork_htdocs_* out of global.conf and into webwork.apache[2]-config (and therefore into SeedCE).
don't complain if tables don't exist when deleting them
fixed typo :P
remove unneeded SetHandler in <Directory> block.
define all 7 seed vars here, don't load a $ce, rename pg_dir to webwork_pg_dir, fix "Allow from all" issue, use "SetHandler None" in static locations regardless of value of webwork_url.
updated docs to reflect Apache->WW var seeding, removed seed vars.
added definition of setting table
PLEASE READ -- APACHE CONFIG CHANGES! This patch makes webwork.apache2-config static (no <Perl> sections) and passes changes into WeBWorK via PerlSetVar directives. The course environment (global.conf) is seeded from these variables. Also changes pg_dir to webwork_pg_dir, so all seed variables start with "webwork_". So update your webwork.apache2-config and global.conf files! :)
allow record classes to specify a set of initial records to insert into a newly-created table. this is used to populate the setting table with e.g. (db_version, $THIS_DB_VERSION).
put most of wwdb_upgrade in a library so it can be accessed from elsewhere.
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
propagate mysql/mysqldump paths to dbLayout params
use new dummp_table/restore_table code for course archiving/unarchiving
dump_table/restore_table: remove debugging ooutput, eliminate unused variable
The url for RPC has to be hardwired. This makes that a bit clearer.
Try this again.
Update -- added reference to the union theme in addition to the moodle and math themes
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.
don't use hardwired mysql and mysqldump commands. find the location of these commands in global.conf (i.e. the course environment)
updating modelCourse
Updating our distribution version of modelCourse to conform roughly to what we use on hosted2 In particular it includes the setOrientation.def file
Updating our distribution version of modelCourse to conform roughly to what we use on hosted2 In particular it includes the setOrientation.def file
added record class for settings
added missing newline at end of file
(1) added methods for setting table (2) added dump_tables/restore_tables
added dump_table and restore_table methods, which use mysqldump(1) and mysql(1) respectively to dump/restore table data to/from a file.
added name_eq where clause for settings
New Gradebook function.
second pass -- now working. this script doesn't support upgrading courses that were archived before per-course version tracking was implemented, so you'll have to upgrade to the current version (24) before archiving/unarchiving courses.
An updated template to use for new problems. A change in global.conf must be made to use this. Search for blankProblem
Allow several blank problems to be added at once to a set.
Adding warnings when dates are not correctly defined
Corrected a logic error in finding the path.
Make sure logic in score display is correct.
Make TEXTAREA fields float above jsMath output as well as INPUT fields.
steps to adding per-course database upgrades -- doesn't work yet, don't use. i just wanted to get it in the cvs repo before the weekend.
replaced typo of qw/allow all/ with correct value "allow all"
$main::VERSION should be "2.x" in HEAD. It gets set in rel-2-x-dev branch before tagging each rel-2-x-y.
Took out a hardcoded variable
Added support for Apache1 in WSDL generation.
Bug fix.
Put back whitespace.
More bugs squashed
User Creation Bug Squashed.
Squashing more bugs adding php4 support
Squashing some bugs with the WebworkSOAP webservice.
Added check for Email module
Changes to make unarchiving possible with a choice names for the unarchived files. To do: Provide updating of the database. Currently there may be difficulties if the database is upgradedbetween the time the course is archived and the course is unarchived. The behavior with sql_moodle data schemas has not been tested.
Changes to make unarchiving possible with a choice names for the unarchived files. To do: Provide updating of the database. Currently there may be difficulties if the database is upgraded between the time the course is archived and the course is unarchived. The behavior with sql_moodle data schemas has not been tested.
move $defaultTheme above $webworkFiles{stylesheet} so that it actually works.
use $ce->{externalPrograms}{gzip} rather than 'gzip'.
change default location of gzip to match FHS, remove old disabled code
add gzip to list of apps to check for
Modified to add WSDL handler and SOAP handler for new webservices. Temporary fix to bug in Apache2 by hardcoding paths.
Inital Commit of SOAP services.
Change externalPrograms{tar} from /usr/bin/tar to /bin/tar which is the "standard" location for tar
Changed Allow => [qw/from all/] to Allow => "from all" in two places
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 typo.
Use defaultTheme
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.
Bring jsMath up to version 3.4b
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.
Check for defined values to avoid uninitialized multiplication errors.
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.
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.
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.
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.
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.
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.
remove old versioning methods that are no longer used by any client code
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.
Updated version of the check_modules function. This should make it easier to add more functionality to this file.
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.
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.
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?)
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.
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 18.104.22.168 (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.)
use student ID for password if password field is defined but empty
don't include Safe::Hole anymore
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 -> 188.8.131.52 lib/WeBWorK/DB/Schema/NewSQL/Moodle.pm: 1.5 -> 184.108.40.206
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)
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
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.
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
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
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
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.
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.
superceded by ProblemSetDetail.pm
replaced by FileManger.pm a while ago
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
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
add more erorr checking, get settings from global.conf.
add ldap options
added missing ")" to log message
Fixed so this works with MSIE now.
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.
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.
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
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.
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".
Added for LaTeXMathML mode.
Added LaTeXMathML mode.
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.
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.
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.)
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
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.
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?
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.)
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 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: ----------------------------------------------------------------------
this CG has not been used for a long time
change order of use statements compulsively
eliminate sub redefine warnings
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.
Make sure that the user list is restricted to the current course. cosmetic changes in Permission
belatedly adding moodle schema modules
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>
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.
replace "SELECT *" with explicit list of fields to avoid problems when columns are ordered differently in the database. fixes bug #1033.
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.
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.
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?
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.
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).
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.
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 188.8.131.52 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.)
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
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 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.
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 220.127.116.11 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 18.104.22.168. 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".
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
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.
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.
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.
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.
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
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.
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.
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.]
also get rid of fixed height for siblings list :-P
back out of overflow:auto feature since it makes mozilla unhappy sometimes.
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
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
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
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.
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.
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.
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.
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.
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.
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
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 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
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.
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';
Add clarification to error message for surePathToFile
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
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 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
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.
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.
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.
Avoid undefined due_date when problem is viewed from the library browser.
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.
Fixed minor glitch where the toggle for show saved answers might be set wrong for the first time a student looks at a problem.
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).
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.
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.
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.
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.
re-added timer for entire content generation process.
Make title look nicer for times when the set name has underscores in it.
Remove the no longer valid message: This may take a long time. Even if your browser times out, all the files will be exported
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
Add style for comments originating from COMMENT() and rendered in the Library browser.
Print contents of COMMENT() commands in the Library Browser.
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.
Update interval notation information for students based on recent improvements in the Parser.
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.
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).
hide options panel here too -- closes bug #802.
removed view options panel, "try it" link preserves displayMode. closes bug #802.
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.
groundwork for preserving non-authentication state (which probably won't get used)
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.
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.
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
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
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.
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.)
Fixed typo.
added login logging and site_checkPassword support. closes bug #729. see that bug for more information.
added login log.
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.
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).
Better spacing of jsMath output in the answer preview area.
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.
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.
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).
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.
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
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.
Added separate file for rendering operation
Cosmetic change to pretty_print_rh
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
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.
Fixed typo
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
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.
(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
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.
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
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
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).
## Make lookups case insensitive. Otherwise indices seem not to be used which slows things down drastically. See firstname.lastname@example.com discussion.
*** empty log message ***
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.
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.
Fixed error in PGProblemEditor.pm that prevented you from adding new problem in a set. Added comment to ProblemSetDetail.pm
Initialize dates to be now+ one week for the open date and now + two weeks for the due and answer dates. This makes it less likely that the date will be undefined.
Added links to problems to the stats page.
Fixed formatting on sidebar links. Added sub links for student and set to the Statistics link
backporting this file
Changed formatting when reporting success index. Success index is now reported in %
Removed commented out code. Fixed a problem with calculating the success index. (the number of attempts was inappropriately zeroed out with each problem.
minor cleanup -- removed a variable that had been defined twice.
Added friendly message when no set is selected. Fixes #750
Removes starting and ending whitespace from most of the form field entries when adding users. Some instructors add students by doing copy/paste from elsewhere. This frequently picks up whitespace which causes the user id field to fail in checkKeyFields.
Fixed problem with hardcopy editing. This case had simply not been handled in the code even though it's the same behavior for hardcopy headers as it is for screen headers. This fixes bug #763
CourseID is now part of the subject line when feedback is sent. This allows you to filter out feedback by course, which is handy for those of use receiving lots of feedback emails.
Better error message if there is a multiply defined user.
Adds checks to make sure that the multiple user problem is really gone.
Added WWDBv3 and stylesheet settings from my local copy.
I believe this will fix the bug which sometimes causes multiple users to appear in the parameters. The problem is that Login.pm filters out user, key, passwd values and then passes the remaining values to hidden_fields to be printed on the "relogin" page. Unfortunately if hidden_fields is passed an empty array then it prints ALL values in the parameter hash as hidden fields. So if only user and key are present they will be printed as hidden fields. If user, key and a non-filtered paramter value are present then only the non-filtered parameter value will be printed. The current fix is a conditional which doesn't call hidden_fields at all if there are no parameters left after the filtering operation. --Mike
Added Text/Binary/Automatic buttons for conversion of line-breaks on file uploads. (Downloaded files are not modified, since we don't know the user's platform. Could try to use the HTTP_USERAGENT environment variable to determine this.) Also produce a warning message if a file is put in the wrong directory (e.g., .def files should be put in templates). Fixed some incorrect indenting.
Moved stylesheet into a separate file. Created new htdocs/css directory, added stylesheet to that directory (ur.css). Include stylesheet in ur.template with new "url" template escape: <!--#url type="webwork" name="stylesheet"--> This is 132 lines that Template.pm doesn't have to parse and 4368 bytes that don't have to get sent to the client with every request.
Bring jsMath up to version 1.7e. Version 1.7 introduced improved alignment in arrays, and the quality of stretchable delimiters in some browsers. It also fixed a couple of bugs. Most of the sub-versions were work-arrounds for bugs in MSIE. Finally, there is support for controlling the style used for displayed equations. (Normally they are centered, but that can now be controlled using the div.typeset CSS style.) A number of minor spacing problems on the PC also were corrected.
display mode was inadvertently reset with other problem/set elements that are safe to reset (rather than keep sticky) since they will be updated from the newly saved database record or thrown away as expected
Fix typo on button.
modified the way we attempt to find out the referring page.
modified code for checking multiple user names. We'll see if we can track down the problem. --Mike
Commented out escapeHTML() of warning messages since it prevented using tables when outputing info about answer evaluators. Can someone tell me whether there is another reason why not allowing HTML in warning messages is or would be important? If so we can figure out another way to debug answer evaluators. -- Mike
new regexp matching can now match on permission level too
Fixing an error in defining $ENV{WEBWORK_ROOT}. Now it points to the generic '/opt/webwork2'
Fixed a bug with the file editor that did not process the file name correctly in the top-level directory. Fixed a bug in uploading a file where the name was given a sequence number even when one was not needed.
fixes to set assignment code
small changes to keep up with DBv3 API
Changes made to simplify the implementation of XMLRPC access to the functionality of WeBWorK. There is still a problem with making sure that the proper warning mechanism is passed into the problem rendering compartment. The proper permissions for creating directories also does not get transmitted properly. I would like to change the way that the defineEnvirVars subroutine is passed into the Local.pm object. I'd like to either pass the environment as a hash or explicitly pass a reference to define EnvirVars rather than inherit it from PG. In particular I'd like to be able to define environment variables directly in RenderProblem.pm instead of faking it by defining fake problem objects.
Changes made to simplify the implementation of XMLRPC access to the functionality of WeBWorK. There is still a problem with making sure that the proper warning mechanism is passed into the problem rendering compartment. The proper permissions for creating directories also does not get transmitted properly. I would like to change the way that the defineEnvirVars subroutine is passed into the Local.pm object. I'd like to either pass the environment as a hash or explicitly pass a reference to define EnvirVars rather than inherit it from PG. In particular I'd like to be able to define environment variables directly in RenderProblem.pm instead of faking it by defining fake problem objects.
Modifications that allow the XMLRPC modules to function.
Added modifications that support the creation of blank problems to be added to sets. blankProblem.pg is stationery for a new problem.
Minimal code for a client which will connect to the xmlrpc access within webwork 2 Use at your own risk :-)
Fixed problem that was preventing HTML_dpng from working. Several initialization problems are currently hacked. I'd like to be able to get the initial request object from SOAP::Lite; I also don't know how to get the port that the server is using: $Apache->server->server_hostname works but $Apache->server->port doesn't Still no support for jsMath mode
Catch multiply defined user warning.
More files for supporting access to problems via XMLRPC code (see comment for WebworkWebservice.pm)
Adding support for an XMLRPC mode which allows access to some of Webworks functionality. These files largely duplicate the functionality of the daemons running on devel.webwork and webwork.math which support the display of the Problem Library. There are still some problems with displaying equations in HTML_dpng and also in jsMath mode. There is a lot of overlap code with PG.pm which needs to be factored out eventually. I'm uploading the code now so that others can suggest improvements and ideas for factoring code.
Work around MSIE bug. (Can't do height:100% for the size of the scrolling list. Every other browser in the world seems to be able to handle this.)
fixed error when set number or problem number is not defined Kept fix that keeps set 0 and problem 0 from being replaced by blanks.
Fixed minor display problem where empty (not-overriden) date values were being displayed as 12/31/1969 Closes #748
Added the following features: * Searching on any user data field * Sorting by any two fields * Reports duplicate names on classlist import Closes #654, #664, and #684
Added course renaming to CourseManagement, CourseAdmin. It works like this: - move the course directory - move any course subdirectories that are still at their old locations (like if they were outside the course directory) - create a new database using addCourseHelper() - copy the course data into the new course database using copyCourseDataHelper() (INSERT INTO $new SELECT * FROM $old) - delete the old course database using deleteCourseHelper() TODO: * write helpers for gdbm and sql layouts * write command-line script
expansion of Mike's caching fixes. see below: * separate setCachedUser($userID) method allows explicit setting of user to cache. This is needed because $r->param("user") is not always set (i.e. in the case of the initial request for a guest login. * don't store a copy of a reference to %permissionLevels, as this isn't any more efficient than accessing the course environment directly. * always construct the Authz instance. * fall back on accessing the database if hasPermissions() is called with a user other than the cached user (or if no user is cached). * warning output (and assume no permission) if PermissionLevel record doesn't exist or permission level is empty. * warn (and assume no permission) if activity is not found in the %permissionLevels hash. * don't pass $ce and $db to new(), since they are available in $r.
Fixed double declaration of $user
escaped hyphen in r.e. to avoid interpretation as range operator.
Fixed small bug in the message passing facility
Changed message passing when there is a duplicate administrator. use addbadmessage() facility instead of warn
The permission levels are now checked when the authz instance is created. This reduces the number of calls to the database. It could cause trouble if there is a change in permission status between the time when the instance is created and when it is used. Since this all occurs while rendering one webpage, I don't think that this time difference will ever cause trouble. -- Mike
Changed unless $value =~ m/^[\w-.]*$/ to unless $value =~ m/^[.\w-]*$/ for some reason having the period at the end was causing the warning: False [] range "\w-" before HERE mark in regex m/^[\w- << HERE .]*$/ at /home/gage/webwork/webwork-modperl/lib/WeBWorK/DB.pm line 1974.
Call $r->param("user") only in scalar context
allow . in login names -- cross your fingers and hope this works.
make sure that $r->param("users") is only used in a scalar context.
Make sure that $r->param("user") is only called in scalar context.
Modifications to make sure that problems with weight 0 print weight as 0 rather than as a blank. This addresses bug #730
Added a line to check for empty records. The hope is that this fixes bug #733
Added summary column for the total value of webwork problems done (sum of the weights of each of the problems correctly completed) Added column for percentage correct (total weight of correct problems divided by the total weight of all of the problems). This set still needs major dehackifying!!!!!! This fixes bug #747. I hope that I've put in enough checks to satisfy bug #746 as well. I will close that bug.
Added an option to rename the "Change Display Settings" submit buttton.
Removed the student progress lines from the Stats.pm page. They are still available in the StudentProgress.pm module
Changed some UI features. In particular the scrolling list is now used both for selecting students to send mail to AND for selecting the preview message (if multiple students are selected the first is used as the preview). The "command table" is now one line taller than it was, but it it now effectively narrower (just two columns) -- the last column has only the row and column options and is not used that much.
Removed a warn statement Made sure that r->param('user') is only called in scalar context.
Added some styles to use when editing a temporary file. This alerts the user that the file has not yet been permanently saved.
Massive overhaul of this file to put dehackify the code, at least somewhat. The cases for handling each file type and each action are pretty cleanly laid out. The next reasonable step would be to reorganize the code by subclassing it. Since in almost all cases the link knows what file type it wants to be edited when it calls the editor, the links could specifically call the subclass editor. This would either reduce or eliminate the need for the file_type parameter. Properly done subclassing would make it easier to add a new file type. Currently you need to add code in about four places: UI code in body, action code in saveFileChanges, path finding code in getFilePaths, and redirect code in pre_header_initialize. For a subclass this code could all be adjacent.
Added a link which allows one to add a blank problem to an existing set.
Added code to display {status_message} when call is redirected from PGProblemEditor.pm If course_info.txt does not exist as a file create it (using `echo "">course_info.txt`) Hope that's not too dangerous, but I didn't feel like opening the file :-) This keeps unnecessary warnings from occuring later when a user would be warned that the course_info.txt file didn't exist.
Move options subroutine up to ContentGenerator. Cleanup commented out code Add facility for reading {status_message} to display messages when a call is redirected from PGProblemEditor.pm
Preserve display options when using the "up" arrow in navigation. Some code that helps pass messages through {status_message} when a call is redirected to ProblemSet (e.g. from PGproblemEditor.pm)
No need to show options on the Home.pm page
Make sure that the instructor links preserve the displayOptions, namely the displayMode and the ability to view the old answers.
ordered has_many, creation date setting. * has_explicit_order() adds a wrapper for a has_many() accessor that sorts the returned records as per a comma-separated list field. * creation dates are now set properly using a before_create trigger. * also there is the beginnings of an assign_to_participants() routine.
added fisher_yates_shuffle() inplace-randomization routine.
commit test
added note (really just a commit test)
fixed name of _bool_normalizer, removed old student_id constraint
fixes, uniqueness constraints, CSV list handling * internal subroutines now have `_' prefix. * added uniqneness constraints (has_unique_columns) * added has_cs_list() to declare that a column is a comma-sep. list
refactored status/role lookups, added abstract set/problem support
fixed incorrect error message for getUserProblems()
ordering, normalizers, booleans, documentation. details: * changed order of table classes so that the has_a() part of a relationship occurs before the has_many() part. * added WeBWorK::DBv3::NormalizerMixin, simiar to Class::Trigger, to manage normalizer subroutines for per-column normalization. * overloaded normalize_column_values to all normalizers for changed fields. * implemented predefined has_a_boolean() normalizer definition. * defined boolean fields in tables using has_a_boolean(). * added/clarified docs. still to do: * add inflators/deflators for durations * add triggers for setting creation dates
creates user, section, recitation, and participant records.
support for importing roles and statuses from global.conf. the rest should be considerably easier than this. i hope. i really do.
Add hack to get around MSIE peekaboo bug. Arnie
changed upgrade_schema to take a DBI database handle instead of connecting/disconnecting itself.
the beginnings of an upgrade script. currently deals with converting permission levels to roles properly! :)
a few things. * added lock/unlock tables * stopped using Class::DBI::MySQL and Class::DBI::AutoLoader * init() routine allows runtime settings * LOCK/UNLOCK TABLES wrapper * inflation/deflation for role.privs (done manually with &priv_list since you have to associate a column with a class to use has_a, and I just want it to be a damn list!) * a tiny bit more testing
preliminary WWDBv3 support. Features: * automatic schema updating (see WeBWorK::DBv3::Utils). * basic table structure constructed by set_up_table(). * has_a/has_many relationships declared explicitly. * works! Limitations: * uses Class::DBI::mysql explicitly. Needs to use BaseDSN instead. * connection information is currently hardcoded into DBv3.pm. It needs to be brought in at compile time, so there are constraints on how this can be done. * no wrappers for LOCK/UNLOCK TABLES yet. * no inflating/deflating for dates, comma separated lists, etc. yet. * basically no testing.
added $guest to permissionLevels hash. Guests to not have the following permissions that students do: * report_bugs * submit_feedback * change_password * change_email_address * record_answers_after_open_date_with_attempts
fixed headers
made similar changes to default admin-course classlist. admin's password is "admin".
new default classlist file. * no more all-caps first/last names * global_user status is drop * global_user and practice users have empty passwords specified * practice users have permission level -5 * professor has password "professor" specified * professor has permission level 10
Bring jsMath up to date. In particular, include changes that provide new LaTeX environments (matrix, pmatrix, etc.)
added "login" permission, handling code. also fixed some heinous formatting.
added "login" permission, handling code.
"remove this comment on the next line if they get left in by accident"
These changes elevate the Options panel to ContentGenerator.pm Some of the changes are a bit hackish, but I believe that they are sufficient for the moment. I expect much of the machinery to be replaced by an "options" table in the new database. The current options state consists of two values: displayMode (for viewing equations) and showOldAnswers (for showing answers between one session and the next). "Sticky answers" which show form entries when the form is submitted and returned is a feature which is always on, as I believe it should be. Known bugs: The options state is lost when visiting the Instructor pages, editing problems, and probably sending instructor feedback. (I have made sure that state was passed for the main links, I hope, but there are many other possible links where state can get lost. My hope is that storing state in the database will make it unnecessary to hunt down every link where state needs to be preserved.) Default options are set in the subroutine options in ContentGenerator.pm This is called before body, where the option panel is displayed, but not before the initialization phase. Modules that need options in the initialization phase (currently only Problem.pm) need to set them themselves. Removed File Transfer from instructor links. File Manager works fine.
These changes elevate the Options panel to ContentGenerator.pm Some of the changes are a bit hackish, but I believe that they are sufficient for the moment. I expect much of the machinery to be replaced by an "options" table in the new database. The current options state consists of two values: displayMode (for viewing equations) and showOldAnswers (for showing answers between one session and the next). "Sticky answers" which show form entries when the form is submitted and returned is a feature which is always on, as I believe it should be. Known bugs: The options state is lost when visiting the Instructor pages, editing problems, and probably sending instructor feedback. (I have made sure that state was passed for the main links, I hope, but there are many other possible links where state can get lost. My hope is that storing state in the database will make it unnecessary to hunt down every link where state needs to be preserved.) Default options are set in the subroutine options in ContentGenerator.pm This is called before body, where the option panel is displayed, but not before the initialization phase. Modules that need options in the initialization phase (currently only Problem.pm) need to set them themselves.
Made modifications to the user interface so that "show saved answers" can now be turned off. If the default mode was on, then this feature could never be turned off. (Unchecked check boxes don't return 0, they are simply not defined.)
Added line to shift column numbers so that they start at 1 instead of 0 (this brings this in line with the modifications made to SendMain.pm) To do: merge the two procedures used in sendmail and in grades.pm which merge scoring data with the message. Then future updates won't break the code.
removed FIXME comment that is no longer needed.
Enormous speed increase by not doing unneccesary assignments or deletions when the user/set record already exists (or not).
Added ability to control the "Missing TeX Fonts" message generated by jsMath. There are now two parameters in global.conf that control the message. You can set $pg{displayModeOptions}{jsMath}{reportMissingFonts} to 0 if you want no font messages, and you can set $pg{displayModeOptions}{jsMath}{missingFontMessage} to a string that should be issued when the fonts are missing. This can be an HTML string, so you can include a link to the jsMath font page, as the current message does. The message will be set in a <DIV> of class NoFontMessage, so the style attributes can be controled in the content-generators template file.
help files now use module name instead of urlpath node name
New help file names match module names rather than urlpath node names
Renaming help files
updated LICENSE and README files.
updated $main::VERSION
POD fix.
better handling when no display module is found for the path.
Bring jsMath.js up to date (fixed problem with font-checking algorithm in PC version of Mozilla)
Every problem after one that was marked as a repeat was being marked as a repeat closes #725
Beautification of set names.
Beautification of set names in Student Progress page.
Beautification of set names in grade module.
Tidying of set names: don't automatically write "set" (teacher can include that), and convert _ to non-breaking spaces in set name.
More fix on the Assigned Sets/User ID column heading so that they are right both in and out of editMode.
When making a new set, leave the name as it was input. Should resolve confusion when making sets starting with "set".
Whitespace changes, mainly a few tabs to spaces.
pod fixes
POD fixes
send call stack to error log, use Apache::Log to log warnings.
Adjusted the headers for the dates
added "User Value" and "Global Value" headers (bug #719)
fixed bug #721.
quick fix for errors while reading directories (bug #720).
fixed typo
formatting fixes (sorry jj, dpvc).
Wrong column heading corrected.
The lines of data were being sorted incorrectly due to the time-stamp that is being added to the line, and due to the correct/incorrect answer data that was added in order to color-code the answer display.
fixed indentation -- please read the webwork coding standards. http://devel.webwork.rochester.edu/twiki/bin/view/Webwork/CodingStandards
fixed typo
add check for undefiend user param (closes bug #714). use $userID for variable containing the ID of a user (not $User, which is typically used for a user RECORD).
Changed format of run time
Adding write to timing log which summarizes the time spent in this module. This does not give detailed timing data. It prints whether or not the timing log is enabled in "Constants.pm". It uses Utils::writeTimingLogEntry and makes an entry as long as the "timing" log facility has been defined in global.conf
Removed writing to Timing log from this module.
fixed typo in "edit_set_for_user" which should be "edit_set_for_users". also changed label to correspond.
work on error and warning output. prettification of stack traces, rewording of explanatory text, better logging, other stuff. a lot of annoying crap, basically.
applied dpvc's index patch, use FileManager instead of FileXfer, fixed indentation.
removed duplicated comment
fixed instructions on customizing webwork.apache-config.
optimizations in database access (makes a big difference). My notes: Here's the initial timing data for a set with 10 problems: TIMING 57300 2 1097622363.881851 (16.734902) mth162: END (assumed) $mergedRecord is never used in FieldHTML(). However, it is populated with a merged set or problem, which requires two database calls and a merge operation. It appears to be OK to get rid of these calls altogether. TIMING 57582 0 1097624803.340321 (11.219321) mth162: END (assumed) i'm not as worried about the several DB calls in handle_problem_numbers(), since that only happens when "Save Changes" is clicked. not looking at those for now... in initialize(), the global set is fetched from the database at the beginning (and put into $setRecord). then it is fetched again in two places, first in a conditional if the "submit_changes" param is defined, and then in the following conditional, when "submit_changes" is defined and there was no error. taking this out... (those conditionals are pretty weird to begin with. i would have expected something more like "if (submit_changes) { ... unless (error) { ... } }". probably from grafting code together?) ok, the big one is getting pre-fetched records into FieldHTML. I added $setRecord and $problemRecord parameters to FieldHTML (and $Set and $Problem parameters to FieldTable to pass through to FieldHTML), and pre-fetch GlobalProblems, UserProblems, and MergedProblems en masse before going through the problem IDs in body(). TIMING 58456 0 1097632191.012939 (4.516615) mth162: END (assumed) And it's only a little more than that when viewing for a particular user: TIMING 58453 0 1097632169.074723 (6.513201) mth162: END (assumed)
Updated jsMath to its latest version. (Better support for Opera, better support for unix, miscellaneous bug fixes.)
Minor updates to the documentation
added link to FileManager to link menu. Link to FileXfer is still present as well, for the time being. We may remove it soon.
Added help file for file manager module
Changed "refresh" to "refresh display" as name for button in ProblemSetDetail Added link to the File Manager
Added link to the File Manager
Made changes to the way $r->param("user") is handled, so that it is always called in a scalar context. This avoids errors caused if user is defined more than once.
Added Mark Correct? option Added date checking fixed some issues with sticky values
If the users status is undefined it is set to C AND it is now saved back to the database.
entabed (we like real tabs)
fixed call to start_multipart_form which caused authen params to be included in form action.
added davide's filemanager
fixing gage specific timing log file (again)
Changed error reporting when there is an error in date/time. This specifies what the subroutine thinks date and time are, making it easier to discover the error in the format of the input I also removed a line which tried to remove the "at" from a format -- such hehelpfuness being unappreciated by the unformatDateTime subroutine.
Changed error reporting when there is an error in date/time. This specifies what the subroutine thinks date and time are, making it easier to discover the error in the format of the input
Evaluate $r->param("user") in a scalar context in case user has been defined more than once. It would also be nice to find where the double definitions are coming from.
Fixed mistake involving "at" in interpreting the date and time string in a .def file
support for password and permission level in classlist, bug #649. note that passowrd is crypted!
support for option password and permission fields, header on outgoing classlists. part of the fix for bug 649.
catch invalid course names in validation (bug #702). fix typo in previous commit.
restore course name in breadcrumbs (closed bug #701)
added check for user ID collisions, closing bug #711.
use WeBWorK::File::Classlist for classlist parsing and writing.
added lowercase "a", "d", and "c" as valid statuses.
added toHash() method to get a copy of the self hash
use WeBWorK::File::Classlist for classlist parsing. removed old commented-out code from before CourseManangement.pm existed.
added WeBWorK::File::Classlist, for parsing and writing classlists.
reorganized, added reindex() method. reindex() will regenerate indices and report what was wrong with the old ones. it cannot deal with the case where there are two records that have the same user ID and set ID, but it does issue a warning in that case.
doc fixworks now
works now
protect against the possiblity that user has been defined twice in hidden fields or in the search args and a hidden field.
Insure that the problems score is always defined (default is 0)
replace old method of evaluating variables by a safer method (no evaluation required) This code copied from SendMail.pm changes made recently by Sam.
Check that userRecord status has been properly defined.
Make Try it and Edit it buttons pass along the current problem seed value, closing bug 682.
Timestamps seem to need Date::Format for time2str to be defined.
Modifications to the format for error reporting.
removed gage-specific path.
skeleton of WW1Hash reindexing frontend
refactored PSVN handling (sorta). also sketch of new, better database checking code after __END_.
eliminate false positives in hashDatabaseOK()
Corrected useage statements.
removed call for epsfile -- it was bogus.
Added time stamp to the warning Added time stamp to warning messages.
Added time stamp to the warning messages.
if status is set but attempted is not, sets attempted to 1
complete rewrite of parseDateTime to close bug #693. - using modified version of WW1's unformatDateAndTime() function for actual parsing. - intelligent treatment of two, three, and four digit years consistent with Time::Local. - attempt to interpret time zone specification using DateTime::TimeZone and then Time::Zone. if neither succeeds, an expection is thrown. - if timezone is not specified, $display_tz is actually used. It never ceases to amaze me how tricky time zone handling is. It appears that I have it right now, but please test.
added instructions for listing all valid time zones.
eliminated warnings in cases where status is "".
removed ability to duplicate a set in edit mode still possible in regular viewing mode
don't send stupid header for safari, don't set feedbackRecipients.
make SQL comparisons case-sensitive. closes bug #679.
protect against sql injection attacks by using "?" everywhere.
actually set RaiseError :)
added permissions to allow disabling of feedback, options. submit_feedback, change_password, change_email_address
better sql error handling. if connect_cached() fails, an exception is thrown. both handles have RaiseError set, so subsequent errors cause expections to be thrown too.
moved new names of some modules to URLPath. added sp2nbsp() for link names.
On the edit set list view, make the set_id a link so that users can see where to edit all set data, e.g. the header file info. Arnie
case-insensitive sorting
removed silly safari hack, added warning about this utility sucking.
Modified flow of verify() so that a user doesn't have to login twice if they have a cookie with an expired key.
Make sure that all request param data defaults to at least "" Fixed Try it links Closes #695, 697
Fixed typo. Arnie CVS ----------------------------------------------------------------------
Make open date, etc. boxes larger to accomodate time zones. Arnie
Increase size of boxes for editing open date, etc. so that time zones show up. Arnie
added script to add indices to sql_single courses. usage: wwaddindexing course_name
added script to convert a course from sql to sql_single. moves sql tables from the course's database to the database used by the sql_single loyout. also gives instructions on how to modify the course's course.conf file to complete the transition. Call sql2sql_single like this, in the common case: ./sql2sql_single <course-name> webwork root <sql-root-pw> You can easily bash script this to do mass conversions of courses: cd /webwork/shared-courses for course in *; do sql2sql_single $course webwork root <sql-root-pw> cd /webwork/shared-courses/$course sed 's/sql/sql_single/' < course.conf > course.conf.new mv course.conf course.conf.old mv course.conf.new course.conf done to do a subset of all courses, change the `for' line to: for course in course1 course2 course3; do
added dbLayoutSQLSources function to get a hash mapping DBI sources to the username and password of the source and the tables that use the source.
Preserves sticky values on all form submissions Added reset form button to delete any unsaved changes Added file error messgaes for headers and problems with non-existant, invalid, or duplicate filenames
No longer initially sets value of textbox to that of select menu so that sticky values are preserved. Checks first for the select menu default value.
added hosted_courses log by default
fixes to make setup easier.
Added time zone to the format time and dates subroutine in Utils.pm
Changed titles of columns to include the word edit.
Changed documentation for "Hmwk sets editor"
Check to see that value is defined before using pattern match
Matching full path was not working (the match was being made against only the file name regardless of the match flag).
Made some of the bold face type entries on the classlist page and the homework page. -- Mike
tiny doc fix -- new() takes a $dbLayout, not a $ce
Added DateTime module to the list of required modules.
cleaned up command-line scripts. - use new hashref form of WeBWorK::CourseEnvironment constructor. - moved PSH to lib/ - stop using FindBin in wwsh
removed deprecated scripts
undefined value was causing unnecessary warns
Added ComboBoxes for header information Allows user to enter a user specified value or to select from currently existing header files
New widget for general use Contains a textfield and dropdown menu of options Makes use of javascript to simulate similar comboboxes from windows/macs/etc
Running latex check_latex.tex will check to see that the .sty files can be found.
Updated set_list help file.
pod fix
minor patch to previous update fully allows editing one set for multiple users
Added ability to duplicate a set. Removed header files, now viewable/editable from ProblemSetEditor Changed links to ProblemSetDetail Lists skipped sets when importing.
Added ability to edit Hardcopy Header If passed make_local_copy with any true value, assumes that the file being edited is some type of library or default file that should not be overwritten and the Save button is greyed out. Stopped editor from trying to edit blank files or edit directories as files.
Changed ProblemSetEditor calls to ProblemSetDetail Added Davide Cervone's patches - Fixes formatting - Made usage more consistent - Added appropriate error messages Closes #663.
Added new setCountMessage so that ProblemSetDetail can say: "User toenail has been assigned x sets"
Changed references from ProblemSetEditor to ProblemSetDetail Added ability to edit a set for multiple users. Closes #646 and #662.
Changed some references from ProblemSetEditor to ProblemSetDetail
Changed instructor_set_detail from ProblemSetEditor to ProblemSetDetail Removed instructor_problem_list Changed some references from ProblemSetEditor to ProblemSetDetail
Replaces ProblemSetEditor.pm and ProblemList.pm as primary form of editing set/problem information.
Sort sudents by Last Name, First Name instead of bu user_id
List students by their real names (in addition to studentID). Arnie
Remove extraneous evals and also clean up email if no record exists in merge file. Arnie
Changed substitution as suggested by Sam Arnie
lean up test seen by students. Arnie
re-added use Date::Format
Make $COL[1], not $COL[0], the first column of the merge file. Also stop negative indexes from cycling, e.g. $COL[-12] should not give $COL[8] in a 10 column merge file. Arnie
timezone support
disabled "sid_open", "sid_due", and "sid_answer" formats, since they don't currenly work with timezones. We need to find some way to get the timezone information in there without messing up the interface. One option is to actually have the database system aware of the timezone and propgate that information on to the Set and UserSet Record classes. Then, add formatted pseudo-fields to those record classes that encapsulate the date conversions. Hm, that would be cool. Eventually, it would be nice if the date accessors returned DateTime objects instead of epochs, but that is for later.
added second argument to formatDateTime(), to support timezone specified in course environment.
added formatDateTime and parseDateTime methods that use the timezone from the course environment if one is not specified and call the "real" functions in WeBWorK::Utils.
moved "use" lines to top of file, clobbered lingering "warn". noticed by dpvc.
Added missing \ for apostrophes after user name.
PRELIMINARY SUPPORT FOR TIME ZONES (towards closing bug #532). (1) new configuration variable $siteDefaults{timezone} Set the default timezone of courses on this server. This must be a value valid for the TZ environment variable. See also tzset(3). If left blank, the system timezone will be used. This is usually what you want. You might want to set this if your server is NOT in the same timezone as your school. If just a few courses are in a different timezone, set this in course.conf for the affected courses instead. (2) support for second optional $display_tz argument to formatDateTime() and parseDateTime(). If specified, formatted string datetimes will be considered to be in that timezone instead of the server's local timezone. Remaining work: find all calls to *DateTime() and add the $client_tz argument. $client_tz is is really something that *DateTime() should be able to grab out of $ce, but they're not a method on ContentGenerator, so we have to pass it in. It might be worth moving them to ContentGenerator. (Or some new subclass of ContentGenerator or something?)
applied dpvc's patch to clean up the answer results table, closing bug #635.
applied dpvc's filtering UI cleanup patch. closes bug #660.
added WeBWorK::Contents switch for preserving hardcopy temp files. closes bug #633.
new using $authz for permissions checks in hardcopy
removed unused
removed unused fetching and passing-around of permission level, commented-out old versions of code. working towards closing bug #574.
applied dpvc's partial correctness reporting patch, closing bug #634.
added check of real user's exiting password, closing bug #625.
rel-2-0-patches merge: removed unused professor-enumerating code, fixing bug #638.
replaced hand-rolled header listing code with calls to listFilesRecursive(). Libraries defined in $courseFiles{problibs} will not be scanned, cutting down on time to list. Closes bug #623.
added listFilesRecursive() subroutine, some housekeeping.
Fixes minor error in last submit. My bad.
merging changes from patches Original message: Status was being checked for 'C' only and counting anything else as a dropped student. The check now uses the more abstract siteDefaults variable from global.conf and admits auditing students as well Also removed redundant second status check that could never be reached.
putPassword() and putPermissionLevel() now auto-create records that don't exist by calling addPassword() and addPermissionLevel() respectively. Closes bug #643.
rolling back accidental commit.
Added Bill's textDateTime/intDateTime routines. Closes bug #618.
removed "use WeBWorK::Utils" (added for debugging)
make sure this problem number exists in the hash before returning. If it doesn't, return undef. We check "pfn$n" since the path to the problem file is the essence of the problem, and if this doesn't exist, the problem might as well not exist.
reduce circumstances in which GDBM retries connecting unncessarily. - check for unreadable and unwriteable files - when auto-creating file by connecting read/write, only connect once. - improved error messages.
rel-2-0-patches merge: fixes for invalid "published" field. Rob said: should finally fix bugs dealing with sets being created (usually from 1.9) without a valid setting in the published field now anyone of Problem, ProblemSet, or ProblemSets will correct this bug.
Better authorization checks (should there be a "view_past_answers" permission level?) and a fix for missing </TABLE> when no entries are found.
Changed a null character to \000 which caused the file to be considered a binary file by CVS. I don't know why it is there in the first place, however. Anyone know?
Modified ShowAnswers.pm so that the individual answsers are colored coded to indicate whether they are correct or not. I also added a permission level called "dont_log_past_answers" that is true for professors (so the answer log won't be cluttered up with professors answers, which we don't really care about seeing). While I was at it, I converted ShowAnswers.pm to use the CGI package rather than explicit HTML.
When a pg file has auxiliary files (like .gif images), it is often stored in a separate directory in order to keep all the files together. In this case, the Library Browser will show the subdirectory as a separate entry in the problem directory list, even though the problem is logically part of its parent directory. This patch modified the Library Browser so that these single-pg-file directories are merged with their parents, as long as they also include other non-pg-files. It also provides a method of controling the library browser on a directory-by-directory basis using specially named files. If a directory contains a file named "=library-ignore", then the directory is never shown in the directory menu. If it contains a file called "=library-combine-up", then its contents are considered to be part of the parent directory, even if it has more than one pg file. If it contains one called "=library-no-combine", then the directory is always listed separately in the menu, even if it has only one pg file.
cleaned up mike's permission level patch to Feedback.pm: - added receive_feedback permission (conf/global.conf.dist) - use standard hasPermissions() function (lib/WeBWorK/ContentGenerator/Feedback.pm) - check for undefined and empty string in permission field (lib/WeBWorK/Authz.pm)
rel-2-0-patches merge: allow pdflatex to handle eps graphics
formatting fix (also comitted to rel-2-0-patches)
Added more units to the help file.
The variable for printing file names in course.conf was incorrectly set up using email addresses instead of userIDs.
fixed bad logic that caused problems if user selected "import multiple sets" but then chose only one set (in this case handler erroneously expected a filename) also tweaked sorting by name to be properly alphanumeric
Fixed a problem with the new stack traceback error trapping. It seems that the hardcopy generator uses the error routines to pass array references rather than strings, so I've added a check for that in the __DIE__ signal handler so that it won't try to add tracebacks to those.
Changed sort of current sets to use sortByName.
Improved error message reporting in PG and in the main WeBWorK dispatcher. If an error is trapped by the main dispatcher, it now prints a complete stack trace for the error. Note that the PG error reporting also requires an update to the pg tree as well, so be sure you update both trees.
Sort lists of set definition files alphabetically.
added instructions/examples for problib hash from 2-0-patches
use "real" table names when checking names and overridden table names when constructing sql statements
changed default database layout to sql_single
added sql_single layout
Fixed bug in computation of average number of attempts (counter was not being reset). Also made display of average number of attempts display tenths (these are small numbers as it is, it emphasizes that it is an average, and it fits well below 2 digit percentages in the same table).
Fixed logic for the check/submit buttons. Previously, if a student had 1 attempt remaining, they only got a check button. The problem was that can{recordAnswers} was used for both deciding record/submit and for whether or not to produce the Submit button. On the last submission, these are different. So, this adds a new field to can/must/will so that one field says whether we can record the current attempt, and another says if we can generate a Submit button.
added code to generate indexes when creating sql and sql_single courses.
Changed the default behavior of feedback e-mail addresses to what was probably intended. The behavior before was by default, all feedback e-mail was disabled. Now, by default feedback goes to profs/tas with e-mail addresses, or to the list of people if it is explicitly given (which can be blank if you want to disable feedback e-mail).
Updated document to reflect changes in List()->cmp flags.
added special handling of ' Top' directory for problem templates now selecting top will show files in top directory not literal "Top" directory fixes bug #630
Improved output for this sample problem.
Bringing Hardcopy.pm up to date on this branch. This fix corrects bug #636. Students can no longer print hardcopy of hidden sets.
added deletion code, got rid of crap.
added ordering and descriptions for known database layouts
added debugging header!
Added \boldsymbol, though it is just an alias for \mathbf, which isn't really the right thing. But jsMath doesn't have the bold math italic font to call on, so there is not much to do about that.
Actually display answers of zero. showHTML() was returning an EMPTY STRING if its argument didn't have a TRUE VALUE.
Actually record answers of zero in the answer log. An EMPTY string was logged if the student answer was not a TRUE VALUE. Thus, answers of zero were not being logged (although they were still in the transaction log).
Updated the parser documentation to include the new features. In particular, included information about the answer checkers. Also, minor changes to some sample problems.
Switched to Interval context (this makes sure open intervals are considered intervals rather than lists).
New example files for the parser's function answer checker.
Fixed typos in Software Warning message.
Added $showPartialCorrectAnswers = 1 to get hints and partial credit.
Added functions to macro file needed for new samples.
Updated example files to use new features of parser and its answer checkers.
Removed unneeded macro file.
Updated examples and problems. Examples were modified so that they produce better PDF files (they now use single-column mode rather than double-column mode). The samples were renamed so they sort better, and more were added that show how to use the answer checkers.
Convention of null database fields being converted to blanks made null/blank date entries for a single user appear to be overrides, which they aren't.
use database-layout-specific helper functions in WeBWorK::Utils::CourseManagement::*.
broke out database-layout specific code into separate classes
added comments, backquoted table names.
added comments
added ability to unassign selected sets from selected users
One more file needed for the examples.
Minor updates to the parser examples (mostly to reorganize the macro files). Note that the sample answer checker in extensions/8-answer.pg now handles fuzzy coordinate checks automatically, since it uses the overloaded == that now does fuzzy checks.
Fixed inclusion of wrong macro file in sample5.
Added the parser to the preloaded modules list.
Two more macro files needed for the Parser examples.
A number of small updates and corrections. Corrected typos in the documentation, fixed a few items in the samples, added the macros needed by the samples.
Changed "me" to this problem and fixed bug which appeared if a set_id started with "set".
README file for htdocs/tmp
merged parser extension docs from rel-2-1-a1
Merged changes from the following commit to rel-2-1-a1. Revision 184.108.40.206, Tue Jul 27 22:36:57 2004 UTC (3 days ago) by gage Branch: rel-2-1-a1 Changes since 184.108.40.206: +4 -2 lines Allows .html, .gif, .png, .txt as well as .pg files to be uploaded and downloaded from the template directory and files under it. Still can't upload/download to the html directory This is not a final solution, but a hack that make workarounds for many operations possible for those who do not have direct unix access. It's still too clunky, but it's a start.
some old, old changes
changes from rel-2-0-patches
fixed hashDatabaseOK to actually add problem records for global_user as well as set records. this is also being committed to the rel-2-0-patches branch.
before, after, between did not cover all cases. The choice of the marginal cases was decided by the best behavior when displaying problems from outside an actual problem set (in which case the dates may all equal now).
updated release notes, updated dates in copyright notice
tiny formatting change -- rewrapped comment.
Added comment
set default paths to /opt/{webwork2,pg}
YET ANOTHER CONFIG CHANGE -- PLEASE READ. This chagne allows command-line scripts to continue to work without defining a bunch of environment variables. Hopefully this will be the last change... Now only $webwork_dir is set in webwork.apache-config. That file then uses this value to read the course environment and get the rest of the configuration values that it needs out of global.conf. global.conf now has variables like $webwork_url, $pg_dir, etc. at the top. In summary: * In httpd.conf, include webwork.apache-config. * In webwork.apache-config set $webwork_dir to the path to webwork2. * In global.conf, set $webwork_url, $pg_dir, $webwork_htdocs_url, $webwork_htdocs_dir, $webwork_courses_url, and $webwork_courses_dir.
fixed field name (it's ANSWER date, not close date!)
rearranged to move commonly-changed values closer to the top.
name submitAnswers button "Submit Answers for $effectiveUser" if acting as a student. (as per jj's suggestion -- see bug #541 again.)
fix error in last commit
Generalized %can settings in Problem.pm with new permissions. Closes bug #541. See said bug for more details.
added light grey background to div.problem. helps to make it clear what's part of the problem and what isn't. not sure if this is a good idea UI-wise.
fixed spacing in checkconfig message
removed alledgedly unused variables.
added comments on how to create an .htaccess file.
changed default WW directory to $HOME/webwork2
new help files
Applied Bill Wheeler's urgency-sort patch, fixing bug #601.
change name of htpasswd file to .htpasswd (as is typical).
"Allow from all" for server-info/server-status in site config. People can tighten this up by setting up authentication.
Applied Bill Wheeler's patch to send raw TeX to client as file download. Fixes bug #589.
disable authentication by default, but you should enable it.
These files are no longer used. See devel.apache-config and devel-site.apache-config.
DEVEL SYSTEM CONFIG CHANGES - PLEASE READ. To complement the new Apache/WeBWorK configuration scheme, the http-wwmp-header.conf and http-wwmp.conf files are being eliminated in favor of a primarily Perl-based configuration scheme. This reduces redundancy and allows both development and production system to share a single "core" WeBWorK configuration file, webwork.apache-config. The setup is described in the new top-level development server config file devel.apache-config: This is an Apache configuration file suitable for use when doing development on the WeBWorK 2 system. This setup allows each developer to run an independent Apache server under their own UID, using their own working copy of the WeBWorK code. The configuration is split into three parts: The first part is a site-specific (but user-indepenent) file named devel-site.apache-config. It contains directives that are common to all development servers on the same host. The site administrator can chose to maintain a single copy of this file and have all developers reference it in a central location. The second part is the stock webwork.apache-config file that is used for normal installations. Customize this file, setting the $webwork_url, $webwork_dir, $pg_dir, etc. appropriatly for your development server. The third part is this file. It contains the user-specific directives that are specific to each developer's server. Of the two files specific to development server configuration, only devel-site.apache-config will require modification, and it need be modified only once per host machine. devel.apache-config uses the UID and GID and of the user running it, and the values set in webwork.apache-conf, to configure itself. wwapachectl has also been modified to refer to devel.apache-config instead of http-wwmp.conf and streamline its configuration.
MORE CONFIG CHANGES -- PLEASE READ. I've changed the way WeBWorK is configured yet again. The Apache configuration for WeBWorK is now done with <Perl> sections. This solves the problem of "seeding" global.conf with initial values for the various root directories and base URLs. it also eliminates redundancy in the Apache configuration file itself. The Apache configuration for WeBWorK is now contained in the file conf/webwork.apache-config. This file is used both for normal systems, where WeBWorK is integrated into the main Apache server, and development systems, where each developer runs his or her own Apache server. Inside webwork.apache-config, seven configuation variables are set: $webwork_url The base URL handled by Apache::WeBWorK. $webwork_dir The path to the base webwork2 directory. $pg_dir The path to the base pg directory. $webwork_htdocs_url The base URL of the WeBWorK htdocs directory. $webwork_htdocs_dir The path to the WeBWorK htdocs directory. $webwork_courses_url The base URL of the WeBWorK courses directory. $webwork_courses_dir The path to the WeBWorK courses directory. These variables are used to configure the <Location>, Alias, AliasMatch, and <Directory> directives necessary for WeBWorK operation. $webwork_root and $pg_root are also used in "use lib" lines to add the WeBWorK and PG lib directories to @INC. Additionally, the above values are shared with WeBWorK via the %WeBWorK::SeedCE hash. WeBWorK.pm passes the contents of this hash (along with a value for "courseName") to CourseEnvironment.pm when initializing the course environment. In turn, CourseEnvironment.pm seeds the course environment namespace with these variables before evaluating global.conf and course.conf.
some changes from a while ago, never comitted.
Fix error in feedback link when the server runs ssl (at least for its standard port).
Restoring gif2png default directory to one appropriate to unix installations (as opposed to macs). Sorry about that .
Modified placement of help link for instructor links.
Added hook for help for instructor links.
Update help files.
Help for the course home page (Generated by ProblemSets.pm)
Changed the way scoring files are read so that they work with files uploaded from Macs.
Added force_eoln() function for converting line endings of a string to unix line endings (\n)
Added help escape handler specialized to handing a url with the course name in the path. The corresponding help file for this page is course home.
an ugly hack to convince safari to download the damn file! apparently just sending a "Content-Disposition: attachment" header isn't enough. it has to be a BINARY FILE! WTF! better solutions welcome.
support incremental sending of exported databases (still slow though).
replaced !WEBWORK_ROOT! with $webworkRoot.
added support for writing database to stdout if filename is "-".
Intial entry
Handle case where setID and probNumber are undefined (e.g. when editing course_info file.)
Properly escape params that are carried through login process. Fixes bug #598.
Moved "use File::Find" to Instructor.pm, where it is used.
Added support for modifying .pg files in the templates directory
Added use File::Find
Added routines allowing the uploading, downloading and deletion of .pg files under the templates directory. Links are not followed. It's probable that more checks and user interface messages will be needed.
Added a space between words in message output to the screen.
Preliminary versions of help files.
The bread crum path at the top leads back to the problem being edited, not to the Instructor Tool. This is at least reasonable behavior. This fixes bug #596 --Mike
Don't show unpublished sets in the siblings list (unless of course you have permission to see unpublished sets. (published == visible, unpublished == hidden) This might be a little slow if there is a very long list of sibling sets. Each set has to be checked to see if it is published.
set student_id == user_id for non-student users. this will help prevent inadvertant collisions, as we're no longer making up fake student IDs.
Changed the misnamed problem_header to hardcopy_header which is a more accurate description of the variables use. Hardcopy.pm now consults hardcopy_header as opposed to set_header This addresses some of the concerns in bug #556
Added \setcounter{page}{1}% to these two pages. This addresses bug #593
Updated to latest jsMath. This one includes a fallback character mapping for unix (though it is not perfect, it should help). See the jsMath home page for some information about how to install the TeX fonts for use with unix.
Added comments that show how variables in global.conf correspond to variables defined in the the httpd.conf file.
Fixed call to hasPermissions.
changed "save options" to "apply options". fixes bug #586.
fixed docs, resolving bug #588.
URL for jsMath and asciimath was incorrectly set during the reorganization.
get dvipng settings from new place in CE
BIG CHANGES -- PLEASE READ. - Changed the format of global.conf so that each setting is its own statement. This makes it easier for users to override settings for a course -- they can simply copy the single line from global.conf and change the value. It also makes it easier to talk about individual values in documentation. - Commented each value with a description and advice. Finally! Yay! - Moved the dvipng options to a new subhash of %pg. They are now in $pg{displayModeOptions}{images}. Modified PG.pm and Problem.pm to match. The next step is to do some organizaitonal work on this file so that the most-chagned options are near the top. Please tell me if you experience any problems as a result of these changes! (Or better yet, submit at patch!)
changed the way invalid courses are detected. $ce->{'!'} is no longer used. also, if CE initialization throws an exception, it is caught and labeled as a problem with CE init.
Fixed uninitialized value. (It comes into play when there are no answers required, as is true for some problems in tour orientation set.)
Fix uninitialized value. (It comes into play if a problem doesn't have any answer blanks. We have these in our orientation set.)
replaced remaining DECLINEs with explicit error messages.
changed error output to label error as a webwork error.
cosmetic changes to check_modules.pl
Provide mechanism for adding extra problem library buttons to the Library Browser. These changes allow you to specify (via course.conf or global.conf) that certain subdirectories of the templates directory are to have separate buttons in the top panel of the Set Maker. These buttons only appear if the directories actually exist, and any other directories are listed in the "Local Problems" button as usual. If the list of these directories is empty (the default), then the results are just like they currently are, but it allows one more level of separation of the hierarchy for those who want it. The idea is to make symbolic links to the problem libraries from Rochester, ASU, etc., and have separate buttons for these. This avoids having one monster menu with all the problems in it. (Of course, you could make buttons for any directories you want.) There are instructions in global.conf.dist that exmplain how to do configure this.
removed deprecated mksqldb utility. use new addcourse utility instead.
Adjusted test for whether a value is really an override. Before it was just whether the value was defined, but now we automatically promote undef to empty strings.
Made adjustment analogous to what is in StudentProgress. Without it, you get "" used in addition errors.
Fixed "last" variables that were not being passed back from the table row routine (where they are changed).
Error.pm will now serve as 404 not found page so far only used for bad course names fedhecks for bad course names should work now for ww1 courses (bug #584) Cvs: ----------------------------------------------------------------------
fixed checks for bad course names should work now for ww1 courses (bug #584)
added README file mostly to prevent this directory from being pruned when -P, -r, or -D is given.
Updated to v1.4 of jsMath. This includes a number of improvements (see the jsMath home page for details). Among these are spacing improvements, support for more LaTeX commands (including sizing commands like \tiny, \large, etc), better handling of unicode characters when the TeX fonts aren't available (on the Mac), and some speed improvement with some browsers.
Improved logic from last fix - declaring problems from outside setmaker to be invalid if they have no global problem.
Fixed bug 583.
Pass more arguments to imagegenerator for image alignment.
Minor additions so that ImageGenerator can get image alignment right.
Added comments on how to make a mysql database for dvipng depths.
Removed short-lived code for putting javascript tags into html page.
Altered course in how to set vertical alignment of images, so this undoes calls for javascript, and passes more arguments to imagegenerator (which can be used someday soon).
Added generation of javascript commands to align dvipng images, when requested.
Added variables for controlling vertical alignment of dvipng images. You can choose your favorite constant value like baseline or absmiddle, or give parameters for a mysql database to hold vertical offsets for individualized alignments.
Added utility function for producing javascript commands for vertical alignment of dvipng images.
Report number of images removed, improved behavior when the user specifies both --remove and --report, die if you don't have permissions to remove an image, and removed comments.
Added comment on how to skip the equation cache.
Script for removing dvipng images matching various date criteria.
Changed suggested dvipng args for versions >= 1.0 to capture vertical alignment information.
added permissions checks fixed bad logic on bad set/problem in URL as professor minor cosmetic changes
added permissions checks
Make the spacing a little smaller, and make a break above the rule more desirable, while disallowing one after the rule.
Moved problem-separation snippet to ABOVE the problem (to get the line above the first problem and simultaneously avoid having to check for being the last problem). Also put the correct answers in verbatim mode to avoid having to make and-hoc adjustments to the answer string (the result will be exactly what the instructor typed, no matter what). This also avoids a problem when the correct answer begins with "[", where LaTeX would think this was part of an optional parameter to \item and either eat the answer (up to the "]") or fail to run entirely (if the answer were "[1,infinity)" for example). If you don't like the verbatim, you can take it out, but then add {} or \relax after the \item to avoid this problem.
exported database now has content type "application/xml".,
removed incorrect "$r->status(OK)" line from reply_with_file. also removed unused REPORT_BUGS_URL constant and reformatted remaining constants.
Added default from, reply-to and subject values. The subject probably needs improvement, but will do for now.
Avoid error messages for problem values that are blank.
handle PRINT_FILE_NAMES_FOR.
email handling. add email to user record, allowedRecipients, and feedbackRecipients. Add userIDs of all added users to PRINT_FILE_NAMES_FOR.
put helpMacro with the macros, use CE bugReporter URL.
indentation fix
added bugReporter URL
cosmetic changes
improved error handling, made SQL statements more robust.
cleaned up form layout and improved error handling. also, instead of having a separate set of field for the "admin user", implemented an option to "add the WeBWorK administrators to the new course".
no change
added permissions for viewing multiple sets viewing unpublished sets viewing unopened sets viewing answers before the answer date
fail on bad course names
made SQL statements more robust (fixes #577), improved error handling.
added check for a course already existing
added QuellSubroutineOutput to WeBWorK::Debug
moved DISPLAY_MODE_FAILOVER to PGbasicmacros
now using WeBWorK::Debug instead of built-in debug() function.
This module provides the function debug(). It conveniently writes debugging output to STDERR or a logfile (if the $Logfile constant is non-empty). It can be turned on and off with the $Enabled constnat. This module should be used in place of warn() for any debugging output. warn() should only be used for non-fatal errors that we want the user to see, not informational status messages.
updated timing to use $Enabled and $Logfile constants.
preliminary Constants module. Currently holds configuration constants for WeBWorK::Debug, WeBWorK::Timing, and WeBWorK::PG::ImageGenerator. It is loaded by WeBWorK.pm. I'm taking suggestions for what additional items to add to it.
added stub for new constants file
TODO: write this, use it for info boxes
a comment
not used anymore
fixed permission check
redid permissions checks stopped professor from deleting or altering own record (to avoid accidentally locking oneself out of a course) Added column for login status
Changing cosmetics in code (PG.pm) and the listing of links (ContentGenerator)
replaced bad use of next with an if-else block
added export functionality with new export mode redid permissions checks with hash took out links for users that don't have permissions to view the linked pages
added permissions checks removed unnecssary code/comments fixed minor bug on invalid problem
optimized the hell out of the database checking code
added getAllPSVNs() method
moved creating of timing object up so we can use it sooner
removed accidental submission of OptionList (not yet ready for use)
re-added case for "edit_set_for_user", accidentally removed in last revision.
A better fix for the "add user" link problem. this still calls AddUser module. That will soon be replaced by a call to UserList module once Robert is done with his work. --Mike
Replaced hardwiring of mth143b by courseName in "add user" link. this piece of code still needs work. It should be a button not a link.
added permissions checks it may be necessary to give someone (like a TA) that does not have the ability to assign sets, the ability to view how sets/users are assigned for troubleshooting purposes but for now, they cannot
added countUserSets method
Searches for some of the executables such as dvipng and tth as well
check for both definedness and non-emptiness when merging fields.
added permissions checks
added permissions checks
Added permission level for reporting bugs.
Updated ur.template to go with changes in "link"
My latest effort at a list of links. The "Add User" function can be accessed from the Instructor Tools page or from the Class List Editor page
First and last names of new instructor as inserted in the new course. The list of courses one can use as a template is not alphabetized.
Added hack for allowing exporting of set definition files. If there is a conflict the earlier files are backed up. So set 0 is always exported to set0.def and a previous set0.def file moves to set0.def.bak. There is only one backup. The messages need work and the utilities, particularly saveProblem should be moved to the Utils files. --Mike
added permissions checks
getMerged* now use the global value when a field is empty ("") rather than when a field is undefined.
promote undefined values to "" in gets() and getAll().
promote undefined values to "" in hash2record().
new help file
fixed reference to $webworkURL in comments at top of file.
Closed up the two lines of instruction at the top of the page Added a link to "Add users". will eventually modify this to a button so that it matches the rest of the page.
added database checking logic. if database is not ok, CG is set to FixDB.
added hashDatabaseOK() function to check and repair hash-based databases from webwork 1. can add global user and assign sets to global user.
this module summarizes database problems and gives professors a chance to fix them.
updated instructions on how to set the database layout in course.conf.
added fix_course_databases capability
added permissions checks
added permissions checks
added permissions checks newly formatted for readability
added permissions checks
added permissions checks
added permissions checks
added permission checks
added authorization checks
Make comparison of first and last names fail silently if they don't exist. Changed the formatting of the add course form
Changed the formatting of the add course form
Adding documentation for new Parser
Added a few more macros to jsMath, and increased the font size a little.
When editting a problem, you now have the option of adding it to an existing set.
changed problem header to paper header fixed minor bug in importing a set
fixed bad comparison that failed on set named '0'
reworked error messages
new icon for editing users/sets
minor UI tweaks added icon for editing sets/users
Use new utility function for adding problems to a set (when importing a set).
Make use of new utility function for adding a problem to a set.
Added a utility function for adding a problem to a set, to be called from several instructor modules.
changed default globalUserID to "global_user"
upped viewing threshold to 50 made new/imported sets default to unpublished
removed ability to delete "visible" users change red background to ResultsWithError class CVS ----------------------------------------------------------------------
changed visable to visible. Closes #554.
added check for well-formed course IDs. closes bug #504.
removed debug output. fixes bug #542.
added README file mostly to prevent this directory from being pruned when -P, -r, or -D is given.
added scoring ability fixed permission tests
Set names might contain underscores, so they need to be protected in hardcopy output.
Added success message when creating a new set. Also, added requested feature - when creating a new set, allow the user to assign it to themselves. This is done through javascript. Only users with js turned on get it, but it is kind of a frill. Non-js users see just the old behavior.
Added timeout alarm (currently set to 5 munites). Fixes bug #511.
Added more LaTeX commands to jsMath. In particular: \begin{array}...\end{array} \begin{cases}...\end{cases} \sqrt[n]{...} \mathbb{...} and a few other ones to avoid error messages.
changed erronious == to eq. fixes bug #546.
Changed Current Set to Target Set (hopefully more intuitive), and changed Top to My Problems, also hopefully more intuitive for non-unix users.
Changed question mark image. It's smaller now.
Default for help symbol when there is no helpfile present.
Tweaked the position of the help question mark. Better default addresses for link.
More tweaking for the position of the help question mark. This is much better. It now has default names equal to the title page name, lower case, spaces replaced by under bars.
Image for help link.
Add minimal support for a help symbol to appear on each page.
Added minimal version of a help symbol that will appear on each page. The CSS at the top of the page needs work, so that not so much space is used.
Added comments -- should we enter the contact person as a student in the admin class so that we can use the email facility to contact people hosted on this server?
If there is an error, other than "course exists" then the directory tree is cleared. This corrects a behavior in which the creation of the new course would fail half way through, but the directory tree would remain -- this made it appear as if the course existed. -- This fix is still somewhat fragile.
Changed the layout of the form so that optional items are listed last.
Allow students to check answers between the due date and the answer date. This doesn't let them see the correct answers, but it does let them enter values to see if those are right without recording them.
Fixed bug 545. Make Problem.pm preserve its state of problem seed when that value was being overridden.
Fixed the following bug: if you change a student's status on a problem to 1 and give them a correct attempt, but then go to the stats page or student progress page, you won't see the change. The reason is that those pages check "attempted" which cannot be changed through this page directly. Now this page updates attemted fields based on if (correct+incorrect attempts) > 0.
minor changes to UI
rewrote much of the HTML code changed table layout
fixed code order to avoid invalid call to published field on a non-existant set Fixes #543.
complete rewrite based on UserList next step is to abstract similarities
Made the list of problems more readable by using center alignment in the columns.
fixed display of published/unpublished text
Changed formatting of the "Add course" sub page. When a new course is created the course name, id, institution and so forth are logged in hosted_courses.log in admin/logs This logging facility must be defined in the admin/course.conf file. --Mike
Rearranged stats table. "good" results are now always to the right (high scores, low number of attempts). Use dashes when numbers are repeated in order to prevent confusion.
This is currently a version of ShowAnswers.pm the plan is to evolve this so that one can view the Past answers log from a variety of views. --Mike
I don't think that anything has changed with this submission. I'm overriding a binary temp file. --Mike
Added hooks for Preflight -- Mike
Command line script to set a password, analogous to the WW 1 script. The name is slightly different in case you need both available.
When viewing a users problem, the rendered versions have the right seed, etc.
Allow optional argument of the set (which better be real).
Added support for initial problem number to renderProblems, and better support for controlling the problem seed.
Just realigned some code and took out a couple commented lines.
When viewing a problem which isn't really part of a set (e.g., out of SetMaker), make the display mode option buttons work.
Changed "Act on" button to say "Update" in bold. Also, added mark all button. Also, added clear all marks button. Also, "Add me" checkboxes are now sticky, unless you update and they are added. Then you get an additional message by the add box. Mayble we should flip the css class of the "Add me" line too to signal who was added. Hidme boxes aren't sticky since their problems usually get hidden anyway.
Javascript close buttons for these files; hidden if the user has js turned off.
Make the message blank when the user doesn't want problems rendered. Different modules may want different messages anyway.
Give the user a choice of which mode to use in displaying problems. Defaults to none.
Changed calls to renderProblems to match the new interface.
Added two more controls next to View Problems: choice of display mode, which includes none for those who don't like to see their problems displayed, and one to choose how many problems you get at once. Also, problems who's rendering cause an error get their message displayed with ResultsWithError.
Changed interface to renderProblems to be key=>value pairs to make it easier to extend options. New option is displayMode, which is allowed to be 'None' if you don't really want the problems rendered.
Made StudentProgress follow the implicit convention set by things like Set Assigner and Set Maker; to use spaces between words.
Try to work around IE bug: on left panel lines wrapped at every space. Those spaces are converted to non-breaking spaces. Ugly, but IE on windows is one of the most common browsers.
Only provide radio buttons for different modes if the site is configured to use more than one mode.
Filename extension of .pg should only be forced for problem files.
If the user does a save as and forgets the .pg, we help them out and append it to the file name.
Get mode list from variable set in global.conf.
Made a loop of loading special environment variables. As a side effect, this makes the default size of on-the-fly graphics visible.
Add configuration variable for the default size of on-the-fly graphs. Didn't really change hardcopySetHeader.
Allready done so this should fail Arnie
change message to visable to students, etc Arnie
Change message to visable to students, etc. Arnie
displayMode is not preserved in the sibling links
added buttons for "Publish Selected" and "Unpublished Selected"
removed vestigal libraryRoot line
PLEASE UPDATE wwapachectl FROM wwapachectl.dist! added warnings if config files are older than distribution versions.
Edited Labels to make clear that "All students" meant all students in the course, not all students shown after filtering. This should eventually be fixed so that "All students" only refers to those who pass the filtering.
the published field is always defined but is empty if not yet set to 1 or 0 now if the published field is empty it is set to 1 this change can be undone once all sets have a published field set to 1 or 0
Updated to autofilter using CE viewable_sections and viewable_recitations Defaults to show all users if values are not defined
Updated to allow record filtering when selecting students
Cleaned up some UI issues. Added message for recitation/section <none>
More files for asciimath rendering.
Tweak to make filters fail gracefully
Allow sorting on allrelevany columns (added recitation and user_id). Arnie
Updated to work with filters in scrolling lists
Additionaly tweaks to fail gracefully
Edited so that filters fail gracefully
display mode handling improved. allowed display modes can now be specified via global.conf. failover data used by the PG system now comes from PG.pm.
Corrected typo in pre-screening for filter
jsMath update for MSIE. Attempted to make jsMathe work better with MSIE on the PC. There was a problem with finding the fonts that this should fix. Still doesn't work with Opera, however, so more to come.
delete course improvements. can now have blank sql password and leave database name blank for default value.
copy symlinks in templates directory
Updated for filtering of scrolling lists
Updated to allow simple filtering of scrolling lists
Fixed bug in previous version Arnie
File of Utilities to allow filtering of users in Instructor Tools
Doubled the length of the save as textfield box. Arnie
Added comments to setHeader.pg. This is now the default set header for both the screen and hardcopy output.
IMPORTANT: changes to wwapachectl.dist -- update local copy! added umask handling. if you're sharing courses with other users (as we are on snoop and devel) uncomment the new "umask" line.
Improvement to jsMath in SetMaker. I made the code a little more robust (I hope). It doesn't work real well with MSIE on the Mac, but jsMath never really did.
Fix for jsMath to work better with SetMaker. Added code to prevent reloading jsMath for each problem, and for making it process the SetMaker page asynchronously rather than all of it before the page is displayed. Still needs some work, but is OK for now.
This fixes bug #510 in which sets which have no defined published state are now assumed to be published when viewed from the problemSets page.
added comments re: valid %options
Sorry about that. These files have been removed.
Adding this stub (developed by Bill Ziemer) to keep compile time errors from occuring.
Added support for library. Added support for jsMath
Allow helpLink to work in pg files.
Allow jsMath to generate answer previews if that is the displayMode chosen.
For helpLink in pg problems.
Cleaned up script Arnie
Added some help files to be called from pg problems.
Files needed for jsMath display mode.
Added jsMath JavaScript files for HTML_jsMath display mode.
Added paths to Student Progress
Added Student Progress section
Updated to make set names into active links
New File to split Statistics page in two.
Don't put answers in the answer log if the problem has not been assigned to the user.
Fixed bug which came up when adding problems located at the top of the templates directory.
Put addbadmessage in Contentgenerator (to go with addgoodmessage), and use it in SetMaker.
added ability to import the contents of another course's templates directory when creating a new course. this is supported in bin/addcourse with the --templates-from=COURSEID switch and in the web interface with an additional form field.
fixed typo: addgoodmsg -> addgoodmessage.
moved %problemLibrary to its own section below database options.
Extricating the problem library from DB structure, part III.
Extricating Problem Library from DB structure, part II.
Extracting problem library from DB structure, part I.
added missing "use" line. "use WeBWorK::CourseEnvironment".
Include cryptPassword in the functions exported from Utils.
can't save as with specifying a filename changed some warns to addmessage()
*** empty log message ***
fixed bug in saving default set header, no more "Use System Default" files closes #500 replace submission_error() with addmessage()
Hopefully moved published to the right place.
fixed incorrect handling of default set header
added "Use System Default" to dropdown list of set headers Fixes bug #492.
On refresh, make source file path relative to the templates directory. This is needed to match the behavior of alias on static gif files.
Set the published field when faking a problem set.
Improved psvn kludge by using the full mysql statement from mksqldb. Fixes the original version of bug 495.
If there is an admin course, make it appear only once.
Made regular expression for set names match that of in DB.pm (meant allowing hyphens).
updated for PR4
changed default courseURLroot to /webwork2_course_files
removed unused code
Changed "success problems added" from resultwitherror to resultwithouterrer.
Lots of addmessage()s added, including success for adding problems. This may close bug 485.
Reorganized to use addmessage for messages. Also minor cleanups of variable names, and better handling when there are no pg files under templates.
fixed error with problems that don't yet exist
Fixed bug 485. The problem occured because with a gdbm database, the global_user is used for both global information, and appears as a user. We have to avoid modifying its information twice. This seems to work, but the "right" fix is probably to work on the database code. With a gdbm database, the global_user should be filtered out of calls dealing with users and only be used on calls about global information. That would mimic the sql behavior better. It would also supress the global_user from appearing in user lists (which I think would be better).
When a new set is created, it is automatically selected. This partially resolves bug 485.
added siteDefaults hash to store other site specific information includes a hash for several possible values of a users status field
added div classes for Published, Unpublished, Audit, Drop, Enrolled
added text classes for students with status Audit, Drop, Enrolled
changed assignSetToAllUsers to ignore users with dropped status
added classlist file containing a single "admin" user
removed sql exec warnings
several changes towards closing bug #481. (1) removed database "multiple source" warnings. (2) if sql database name is blank, "webwork_$courseID" is used. (3) removed sql execution warnings. (4) allowed blank sql admin password.
added pop up list of set header files fixed false successful save message
create "psvn" field as "INT AUTO_INCREMENT"
add global user record to new courses
separate link for course management
added "This problem does not count towards your grade." messages if the weight of a problem has been set to 0. Fixes #464.
Defined $WeBWorK:;timer again for use in debugging code $timerON =0 by default in WeBWorK.pm and the timing log $TIMING_LOG is initially set to the empty string which implies STDERR
added functionality for published/unpublished
This checks for modules known to be needed by WeBWorK. The list of modules is supplied in the DATA section of the script.
addmessage() used for success messages
now passes success/failure messages to Problem.pm
added processing of sucess/failure messages from PGProblemEditor.pm
changed submitError to addmessage()
changed submitError to addmessage()
changed submitError to addmessaage()
changed all submitError to addmessage()
uses addmessage() instead of submitError
changed all submitError to use addmessage() instead
changed addmessage() to replace submitError
changed submitError to addmessage()
dded use of addmessage() instead of warn and submitError
Added surePathToFile utility called as surePathToFile start_directory path (the path can be the full path including the start_directory segment) If the start_directory is the tmp directory then one has the effect of surePathToTmpFile defined in IO.pl
Added a surePathToFile call when saving a .pg problem. Now they can be saved in a new directory. This is a partial solution to having a read only library. More to come.
replaced error processing with call to addmessage()
replace submitError with addmessage() call
done with this
test of activitymail diff functionality
another annoying text of the new cvs mail logging script. cool, the first sentence of the log message becomes the subject of the email!
removed some text
more text
added text
changed test-file
added test_file.
Added sibling links for the Statistics page.
Formatted the "PREVIEW ONLY" and "Not Recorded" messages as 'ResultsWithError' to insure that students don't accidently think they have submitted their answers.
Fix bug: use of an undefined value.
Added average number incorrect answers. This closes bug number 264 Tweaked a few more user interface parameters.
Cleared commented out code in Stats.pm Fixed error arising when no scoring files were checked. Nows gives a more useful message. This fixes #379
Doing 'Save as' on a problem pops up a new PGProblemEditor window. Now the new window contains the newly saved file. Also modified the name of the target window since targets aren't supposed to start with _ (except for the special reserved ones), and so that editting in the new window and clicking on a button like Refresh will open yet another window.
Added safety switch for unassigning sets. This closes bug number #403 Added some messages reporting action taken.
Added a message field at the bottom of the page. This will catch result messages issued in the body of the page It's not as quite as eye catching to have the message at the bottom, but it's better than nothing. Errors issued during the initialization stage appear at both the top and the bottom of the screen. --Mike
More user interface work on SendMai.pm Resolved bug #390 Now we simply report the number of students to which we have attempted to send email, rather than list the email addresses.
Modified user interface for choosing message to preview. Unresolved is the issue of bringing the preview up in a new window.
Modifications to remove extraneous error messages. This resolves bug 410
Sort sets by alphabetical order for the SetsAssignedToUser page. Corrected typo on Stats.pm
Fixed minor bug which occured when no student had yet tried the problem.