I have a client who is looking to build upon their WordPress website, and add in some extra functionality. I'm just looking for some suggestions for how I could go about building this, because one of the disadvantages of being a freelance developer is that you can't have a meeting with your team of developers!
Anyway, the website offers tuition content to students. Here are the additional pages/areas of the website required:
Viewable by: The student, mentor & administrator.
Editable by: The student & administrator.
Perhaps it's possible to expand on the default WordPress profile fields for this?
Fields: name, address, telephone, email, website, date of birth, profile picture
Vieweable by: The student, mentor & administrator
Editable by: The student, mentor & administrator
Each student has 16 pieces of coursework to upload. Each piece requires a title field and an upload box.
They are also given 7 quizzes which are presented as streamed videos. They need an area to upload their response to each quiz, as well as ask questions.
They have to upload three papers, which have specific due dates.
They have to upload multiple MP3 recordings, and their mentor has to upload an evaluation document for each of these MP3s.
Viewable by: The student, mentor & administrator
Editable by: Administrator
This page requires editable textareas and document uploads (the documents need to stay on the server and be downloadable from this page once they've been uploaded).
Viewable by: The student
Editable by: Administrator
This page will just contain information about whether the student has paid their course fees, and how much they've page. It also requires functionality to export the information for all students as a csv, or similar.
Anyway - as I said, I need some suggestions on how I could develop this functionality. What plugins to look at, etc. If any of you are interested in actually developing this - the deadline is the beginning of August. Please contact me with your cost for doing so.
The student and their mentor need to be able to message each other on-site, and the administrator needs to be able to view the various message streams between each student and mentor.
Bill Hunt answers:
Other people might be able to point you to a lot of random plugins which which you could cobble together a solution for this. However, with all of the uploads and management tools required, this sounds like a pretty complicated system that would probably be much more efficiently done as a custom application. Just my two cents. Trying to force Wordpress to do all of this would most likely be more trouble than it's worth, and not particularly cost-effective to develop or maintain.
Oleg Butuzov answers:
custom WP_Roles functionality + WP_Capabilities + many custom code.
Oleg Butuzov comments:
<blockquote>Trying to force Wordpress to do all of this would most likely be more trouble than it's worth, and not particularly cost-effective to develop or maintain.
Bill actually its quite possible and wouldn't made anything bad.
Xavier Faraudo answers:
Here are my two cents.
You could use either usermeta, or expand the existing table with dbDelta. If you don't need operating with birth dates as dates (egr., extracting the month and sorting by it in a single query), the usermeta will do. For the user image, just filter the get_avatar function. You can add all the usermeta fields needed with the form actions show_user_profile and edit_user_profile, and update with personal_options_update and edit_user_profile_update. I am already using the birth date and custom avatar as features in some of my themes, and have functions to process the birthdate as YYYY/MM/DD and back (stored like that, the alphabetical order works OK if you ever need to sort by date), and to hook to get_avatar, should you need examples, but that's actually quite easy.
Without any doubt (IMHO), this is definitely custom post field territory. Just remove the unneeded features from the custom post (you can strip the Write Post screen of nearly everything with post type capabilities). Custom post types also allow for specific user capabilities, like, say, edit_course.
As for the areas for response/asking questions, I think it depends on the, say, user experience. Should they be able to see other students' questions? (I understand that they should NOT be able to see others' students answers). The hardest point could be to make the answers unique (i.e., allow only for a single answer to each quiz, and make it non-editable after time is due), but as for questions, either another custom post type (using hierarchy) or, maybe even better, comments and optionally some commentmeta hidden/view-only-with-permission integrated in the theme; that'd require a custom Walker class for comments.
The parentage of posts (think of Pages) can be used, too, for the evaluation doc uploaded by mentor. This doc will relate to one, and only one, of the uploaded MP3 (right?).
Well, maybe I'd require a more precise idea about exactly how this would work, but looks like here that Pages or categories/other term types would fit in nicely. Those text areas you need could be not text areas, but regular posts adscribed to that category and another one for specifying the "content-type": egr., to differentiate the text areas from the uploads. But with the Page solution, you can have all the text areas you need (can add meta boxes to a Page with specific template, whatever...).
Maybe even a modified author template could do the job.
Depending on the amount of fields needed, I would either add them as a part of the user profile (see above), if it isn't too extensive, and add the download as csv functionality with some option menu (Tools looks like the place, but you don't need to put it right there... a custom settings menu could also be useful not only for this). I suppose that the functionality to dynamically create the csv wouldn't not need to be extemely complicated, maybe just check the nonces, and echo the query results (just like when dynamically creating an image). I haven't worked much with this kind of files, though.
No doubt here - use custom post types, with all the capabilities of a post and/or Page (so a message can be a child -answer- to another one). Nicest point here is that you can use regular templates, with all the format options, not just an admin section. BTW, as a happy coincidence, I was planning to do a plugin for exactly that (actually, I even started it, but it's in a excessively-early development stage, haven't been able to work much on it).
The only real trouble I see here is the deadline: the best way to do some of the features required is with relatively new WordPress stuff, like using custom post types as uploaded content handlers (à la "extended attachments"). And most of the things you'll find are just like regular posts with prefixed custom fields and/or meta boxes; nothing you couldn't do (even better) with categories/post tags and templates. So there isn't quite a big plugin pool to browse; and, on the other hand, any private messaging system that does not use the WP API (namely, custom post types) is prone to be doomed: too much maintaining effort for its own API and features, incompatible with existing APIs and virtually invisible to other plugins, &c.
So, to be honest, and as you already see, I'm not at all sure that I could help you in all the required features with the due diligency, there are others I'm pretty sure I can (and in some cases, because it would be just copy, paste & change a bit some of my existing code): this private messaging plugin could really use some sponsorship. So, if you like my proposals, and is OK to you to break the tasks like this, feel free to contact me, too.
Anyway, have good luck with your project. Looks interesting, not just the boring "another business card type webpage" I'm sure we're all quite tired of :).