I'm Hylke van der Schaaf. I work at Wageningen University for the group Wageningen Multimedia Research Centre (http://wmmrc.wur.nl/). I design and implement digital learning materials for various fields in the life sciences. As part of my work I develop and maintain a set of Drupal modules for the use of closed questions in education. Since there is an interest in these modules from other universities as well, I'd like to have them hosted on drupal.org.
---------------------------------
Module: ClosedQuestion
Download: http://wmmrc.wur.nl/drupal-modules/download
The Drupal module ClosedQuestion adds the Closed Question node-type to Drupal that takes an XML question definition and displays this question to users. The ClosedQuestion-nodes are stand-alone and can be used anywhere a normal node is used. For example as training questions halfway or at the end of a chapter, or as a set of questions forming a case-study that leads a student through a complex problem by asking a series of questions. The ClosedQuestion module is used by the Proteus and LinearCase modules.
Features:
* Designed for practice: students can take as many attempts as they like.
* Many feedback options, feedback can change with number of attempts or specific answers.
* Many question types.
Comparison with Quiz:
Quiz is made for quizzes. This makes Quiz mainly suitable for testing knowledge, not gaining new knowledge. Especially the feedback options for Quiz questions are very limited. This is logical, as extensive feedback options make no sense in a quiz context where a student can try a question only once. Quiz questions also do not work outside of a Quiz.
---------------------------------
Module: Proteus
Download: http://wmmrc.wur.nl/drupal-modules/download
The Proteus module shows questions to the user in a certain order, based on the student's current knowledge. The mechanism behind the order of the question is described in: http://wmmrc.wur.nl/sites/wmmrc.wur.nl/files/Proteus-A_Lecturer-Friendly...
The Proteus module depends on the ClosedQuestion module.
From a student's point of view:
* A student starts at a level of 0 for each objective.
* The student can get questions that have an entry level that is lower than or equal his current level.
* If a student answers a question correct in 1 try, his new level will be the exit level for each objective linked to that question.
* If a student needs more tries, his new level will be lower than the exit level.
* Once a student reaches the target Level for all objectives of the Proteus Quiz, he has finished the quiz.
---------------------------------
Module: LinearCase
Download: http://wmmrc.wur.nl/drupal-modules/download
The Drupal module LinearCase allows ClosedQuestions and other documents to be ordered in a "case study".
A linearcase is a book that limits a students navigation. A student can progress through the book freely, untill he reaches a page with a question. The student then has to answer the question correctly before he can go to the pages beyond that question.
| Comment | File | Size | Author |
|---|---|---|---|
| #18 | closedquestion_101111.tgz | 70.88 KB | HylkeVDS |
| #16 | closedquestion_101110.tgz | 79.96 KB | HylkeVDS |
| #17 | closedquestion_101110.tgz | 79.96 KB | HylkeVDS |
| #15 | closedquestion_101026.tgz | 67.74 KB | HylkeVDS |
| #14 | closedquestion_100930.tgz | 64.78 KB | HylkeVDS |
Comments
Comment #1
HylkeVDS commentedComment #2
avpadernoHello, and thanks for applying for a CVS account. I am adding the review tags, and some volunteers will review your code, pointing out what needs to be changed.
We review just a module per applicant; please let us know which one you want reviewed.
Comment #3
qasimzee commentedI reviewed Closed Question and following are the things needed to be corrected
1. Use an indent of 2 spaces, with no tabs through out the module
2. Line 279: else statements should begin on a new line
} else {Please read coding standards for details.
Comment #4
HylkeVDS commentedThe ClosedQuestion module is the most important one, so that is the best one to review indeed.
I've updated it to the coding standards.
Comment #5
HylkeVDS commentedComment #7
zzolo commented@HylkeVDS, thanks for the application and patience. The following points are just a start and do not encompass all of the changes that may be necessary for your approval. Also, a specific point may just be an example and may apply in other places.
Do not specify version.
Please use the format "Implements hook_schema()." as stated in coding standards for ALL hook implementations.
Do not put includes in the global scope. They should be included when necessary (ie menu items or hooks) or if absolutely necessary, in hook_init(). Also, utilize module_load_include().
Constants need documentation blocks as well.
Please space correctly as outlined in the coding standards.
All output needs to be in theme functions.
Unnecessary
Good start put please follow standards.
Overall, good start. Please follow coding standards.
--
Note: Please be patient with the CVS application process. It is all done by volunteers. Our goal is not to be arbitrarily slow or meticulous. Our goal is to get you CVS access and ensure that you are and will become a more responsible Drupal contributor. For a quick reference on what I look for in a code review, please see this article.
Comment #8
avpadernoTo understand which changes are strictly necessary to get a CVS account, see http://drupal.org/node/539608.
Comment #9
HylkeVDS commentedThanks for the review, those pointers improved the code quite a bit :)
Do you have any pointers on how to handle old version numbers in the changelog?
Comment #10
avpadernot().Comment #11
HylkeVDS commented@1: Menu Titles and Descriptions should no longer be wrapped in t(). (http://drupal.org/node/140311) The coder module also complains if you do.
And I don't see any schema descriptions that are not passed to t()? Or did you mean I was missing descriptions in the menu items? I added those now.
Renamed all classes to remove underscores, added Interface suffix to interfaces, removed camelCase from all non-class methods and variables.
Removed all class file includes and moved to using the autoload module. Added the minimum php requirement for autoload.
Fixed several doc sections and other small things.
I have a question about naming theme functions. I have a lot of theme functions that theme a specific object type, like "theme_CqOption" that themes a CqOption. Naming convention states that that should be named "theme_cq_option" but it seems to me to make more sense to keep the exact class name in the method name. Is it better to stick to the convention, or to use the more descriptive name?
Comment #12
HylkeVDS commentedI just found out that mixing autoload-dependant classes and theme functions in the same file does not work. Update.php updates the theme registry without loading autoload, and thus gives a fatal error if it can't find required classes or interfaces that are needed for the class that is in the same file as the theme function.
Theme functions are now all in a separate file.
Comment #13
zzolo commented@hylkevds, thanks for the application and patience. The following points are just a start and do not necessarily encompass all of the changes that may be necessary for your approval. Also, a specific point may just be an example and may apply in other places.
Please use HTML special entities or some other better method of encoding non-standard characters.
Very close!
--
Note: Please be patient with the CVS application process. It is all done by volunteers. Our goal is not to be arbitrarily slow or meticulous. Our goal is to get you CVS access and ensure that you are and will become a more responsible Drupal contributor. For a quick reference on what I look for in a code review, please see this article.
Comment #14
HylkeVDS commentedI noticed the camelCase variable names myself just yesterday as well. Apparently coder misses the camelCase in non-class functions if there's a class in the same file above the function. I didn't re-check the coder output after I moved the theme functions, as all I did was move some functions, so I didn't expect any new coder output. :)
As for the theme function names, I asked about those in #11. I've changed 'em to the lowercase now, long live regexxer :).
I've replaced the Σ's with Σ
Development has continued. This new version has some new functionality that uses the EvalMath class available under a bsd-licence. It's in lib/evalmath.class.php. I could not find any policy on including 3rd party code that has a compatible licence so that might need a closer check. I did update the class to follow the coding standards.
This version also has an updated db schema, so if you already installed the previous one, you'll have to uninstall it first.
Comment #15
HylkeVDS commentedHere's an updated version.
Comment #16
HylkeVDS commented[oops, double post]
Comment #17
HylkeVDS commentedAnother new version. I found a GPL2 version of the EvalMath file, and ported all my changes to that version. That solves any potential licence problem. I've not found any active upstream for EvalMath, seems like it's not been under development for the last 5 years.
I've also made a start with advanced-help documentation.
Comment #18
HylkeVDS commentedFixed some missing $Id$'s
Comment #19
zzolo commentedHi @HylkeVDS. Thanks for all the work on this. I am going to push this through. Please note the suggestions below, specifically the first one, which you should really do before releasing, as naming convention and namespaces are very important in the way that Drupal does things.
Please read the following resources to make sure you know how to use CVS and the specifics to the Drupal CVS infrastructure, as well as how to be a good module maintainer on Drupal.org. The Drupal community is very large and dynamic; we welcome you as a module maintainer and hope that you embrace and challenge the Drupal community and continue to contribute.
Thanks again for all your hard work and patience. Happy hunting.
Comment #22
avpaderno