I have funding from a school district in my state (New Hampshire, USA) to work on a simplified Open Source student portfolio system. (For my client, OSPI is considered too mammoth and the technical dependencies are unacceptable.)
There has been some discussion in the forums of various ways of making Moodle work with or as an e-portfolio system, but is there any solid work being done on this now?
It makes sense to me that there should be a table named something like "prefix_portfolio_item" that will contain individual portfolio items and be keyed by at least an id, a userid, and a submitted assignment ID.
I'm a little less sure how to approach the creation of the portfolio's structure; each school needs to be able to create its own "portfolio framework" (or whatever we're going to call it). For example, the teacher in charge of administering portfolios needs to be able to specify:
Level 1 Portfolio Assignments (writing item, math item, art item)
Level 2 Portfolio Assignments (writing item, math item, art item)
Level 9 Portfolio Assignments (writing item, Personal Learning Plan)
Level 10 Portfolio Assignments (writing item, resume, science item)
Level 12 Portfolio Assignments (senior paper, 5-year plan, etc.)
That is intended to be the portfolio framework that each student will fill in as she passes through each level. (Students also need to be able to create custom ad-hoc portfolio items, but we can solve that probelm later.)
In the U.S. we would use the word "grade" instead of "level", but I've been using "level" as a genericized term. Maybe this is something that should be configurable in the portfolio module -- "What word do you use for an education level? [grade, year, etc.]"
I don't know how it would be best to approach this part, but I see three different major types of answers:
- Use a course with several assignemnts as the portfolio framework; every student is enrolled in the Portfolio course
- Use a course for each different level of the portfolio framework, and either have all students enrolled in all of them or only enroll students in their own current levels.
- Don't use courses at all, and make the portfolio into a totally separate thing from courses that will probably be very similar.
In addition, the process of creating the portfolio framework is just like creating the set of assignments for a given course.
The problem is that a portfolio isn't exactly like a course, in that nobody is really "not enrolled" in it.
It would be beneficial to make portfolios use existing Moodle concepts (courses, assignments) because that will give great flexibility to the user, who could create a single portfolio course if desired, or who could create the entire portfolio framework for all students. In addition, the portfolios will need to be viewable by the public, and if that could be applied to any course to make that course's assignments publicly viewable that may also be useful sometimes. However, doing this would require existing structures to be changed so that (for example) a course is marked as "assignments_public" or not, and an assignemnt is tagged with a publication level, and permissions, etc.
So in summary, I want to use existing Moodle concepts and code where appropriate, without abusing them or introducing unreasonable interdependencies. I also want to avoid bolting something foreign to the hull.
At this point I'm starting to write some code just to try things out, and I'm already running into issues. If this module will be an independent add-on, I can't change existing structures, which may end up (ironically) creating all sorts of interdependencies from the Portfolio module onto other modules. For example, if the Assignment module is used to handle everything related to the submission and management of portfolio items, then I'll need to create a separate portfolio_item table that has foreign keys into the assignment table. That makes sense and it may be a fine approach, but since I'm new to Moodle development I'd appreciate a thumbs-up from somebody knowledgeable. (An alternative would be to change the assignment table to include columns of portfolio-related data. This would be a cleaner solution in some ways, but not in others.)
I'm interested in all comments and opinions as I work on this project, so let me know what you think! (Especially if you want to help! )