Student Test result form - multiple students and multiple subjects

angello

New Member
Student Test Results form

I am not a php programmer, but understand a little php and mysql.

A registration form for registration of multiple students with multiple test results on the same page (not using lists at all) We have 2 terms in a school year.

Explanation:
  1. A school may have 3000 students in total.
  2. We want to filter by cascading dropdown (or by search to find one student, search by student ID or name)
  3. The date of the exam will be chosen.
  4. We get a list with all students in the first column
  5. The next columns will be empty ?boxes? to register the test results under the different subjects.
  6. After saving the form, the test results will not appear again in this form. The forms will contain the student names only with empty test results ?boxes?.
  7. To see and print out the test results, we will make a new view/template with inline edit. (called test results report)
We have created several normal fabrik lists and table with this fields:
id
date_time
school
departement
level
student_name (here is the student ID, with the name from the student table)
subject_name (here is the subject ID, with the name taken from the subject table)
max
min
result (this is where we need to register the test results)
total
grade
exam_date
class
publish_date
publish_date_end
end_publish_date
the_user
semester
order

How should we do this to get this working?

See illustration:
registering%20test%20results.png
 
So is the illustration something you already have, or something you want?

Are you planning on having a single results row per student, so a resulkts table with a field for each subject, or a single-subject row, with a join to a subject table to identify the subject for each result row?

-- hugh
 
The illustration is exactly what I want to have. I made this as an image so it would be easy to understand what I need.
I have made:
  • Student list
  • Subject list
  • Test result list
The schools need it this way (see illustration) so it would be easy and fast to register the test results.
I dont know where to start to make this.
Thanks!
 
What you are describing is essentially a pivot table with grid style input, which is pivoting on student and course ... and although we do have a simple pivot list plugin, it isn't designed for doing this kind of stuff with.

The only way I can think of to get close to the UI you want is to have something like an "exam" table, which just has the date, with a repeat join to a "results" table which has one field per subject (and a calc element for the total), with the repeat group set to "table" format.

Then you can edit the exam row, and you'll have that repeatable grid for the results.

Is there any specific reason you have to go with a "normalized" results table, which has just one subject per row, rather than the more monolithic structure I described, where the results are one row per student per exam, with each subject as a field?

-- hugh
 
Thanks for your response Hugh,

For the total of 30.000 students, All the schools have the same curriculum, according to the level like, Primary, Secondary, High School, International school. Each level have different minimum and maximum for passing. Under minimum, not passed. The result is based on a percentage of the maximum.

There are 2 reasons why the schools want it like this.
1. It is faster to record each result for each student.
2. The government (in Egypt) need it this way as a report.

In one school there are one person that is going to record this test results, and if the school have 3000 students with 7 subjects to register, that will be 21000 posts, they are looking for a way to do it as fast as possible, and not one student by one student. (And by the way, they are not any good to use MS Exell for uploading a csv file ;)

I have a student list. Uploading the students as Joomla users and students in the student table are easy. Each student is a Joomla user with registered user info. in the student table. (I am doing that part)

If I duplicate the fabrik student table, can I join the subjects to it?
I am confused and dont know where to start.??
 
So, there are two exams per year, which are defined by the date? Or do different schools have exams on different dates?

To get an idea of what I'm tlaking about with the repeat group table view, do a quick test. Create a simple test table, like "exam_test", and add at least one element to it, doesn't matter what, a simple field called "test", whatever. Then (in the Groups admin) create a new group (called "Results Test" or whatever), add it to that form, set it to repeat, and set the "Template" (in Repeat tab) to "table". Now add a few subjects (as simple fields) to the new group on your test form, like Math, English, etc. You could also add a database join element to your Students table (set 'id' as the value), and set it to "auto complete".

Now, view the list for "Exam Test" (View Data on the List admin page), and add a new row. You should have a "grid" style input for the Results Test, that let's you quickly add new rows.

If you then look in your database , you'll see that Fabrik has created a new table, called something like exam_test_123_repeat, which has all the exam results in it, and a parent_id field which is the FK (foreign key) pointing to the row in the exam_test table the results belong to. This is created because when you set a group to repeat, we automatically create it as a one-to-many related table.

Note that we can go about setting that up in a different way, so you are in control of creating that results table, and it's called whatever you want to call it, rather than our default list_name_X_repeat format.

So that's the approach I'm looking at. Each exam is a row in the "exams" table. Results are added by editing the row for a given exam, then adding rows to that grid style results group, which wind up in the "results" table.

That still leaves a number of issues to resolve, like filtering that repeat group so schools only see "their" students results, we don't show results that have already been submitted, etc. I can't tell you off the top of my head how we'd do that, as we don't typically filter out repeat group rows from a given form. I haven't really gotten that far, but I think we can do it with pre-filters.

My only real concern here is that Fabrik just wasn't really designed for this kind of use. We can probably do it, but a) I can't 100% promise we can do this to your exact spec, as it's pushing the envelope pretty hard, and b) this is a bit "heavy weight", Fabrik was designed for smaller apps with a relatively short lifetime, not large, long term, "mission critical" apps.

You may want to at least consider hiring someone to write an app from scratch to do this.

So ... I think the way to proceed is for you to start playing around with some tests. Start with what I described above. If that looks like a good starting point you can work with, then we can start looking at how to do the rest of what you need. Once we have established how to do everything, assuming we can, we can then build the "real" app, using what we learned from the tests.

-- hugh
 
Hi Mr. Huge,
Hope you are well from the last operation.
I am sorry I have not been active with fabrik for some time. But now I am back.

We have followed the instruction above, and it all works fine so far.
We added a dbjoin element called name (student name) and gets the name for the student when we start writing...
We also added some subjects, as elements.. Works nice..
We have added a Jgroup field called school to the group Results Test. Works nice..
In this way we can prefilter on a specific usergroup. Works nice..
In prefilter we added {$my>id} so each student can see himself only. This works nice..

Attachment: 2 files -> exam-list, exam-registration

The next challenge
All the schools have the same government curriculum. But..
All schools have different subjects as well, in addition to the government curriculum.
(Most schools use different names on the subjects)
This works on a department -> Level basis.
(Department is Arabic Department, English Department and International Department. Level may be Primary 1, Primary 2 etc)

Our Goal
We need only that subjects to show that belongs to that specific Level in the school.

Could this be a dropdown field that gives an option to filter on 1. Department 2. Level
See illustration in the first Post.
Do you have any idea how this could be done?

Thanks for your help,
Michael
 

Attachments

  • exam-list.jpg
    exam-list.jpg
    103.1 KB · Views: 646
  • exam-registration.jpg
    exam-registration.jpg
    66 KB · Views: 561
We have now made 2 cascading dropdown fields in the exam_test group.
1. Department cascading dropdown based on School ( Joomla group)
2. Level cascading dropdown based on Department

It works fine.

Challange
How can we show elements that only belongs to the Department?

We have a List called subjects. We register all subjects there inclusive: J group, Department, Level and Subject Name.

Please point us to the right direction?
 
I'll need to have a live session with you, to walk through your setup and fully understand what you need to achieve.

I'm now logged back in to the Zopim live chat, so you should be able to catch me online. My hours are still somewhat unpredictable, so just grab me when you see me online.

-- hugh
 
Hi Mr. Huge,
With your help (above) we manage to finish what we needed. We did a lot of searching and found a way for everything. Not all as initially requested, (see first post) but close to it. It became an acceptable solution, and we learned a lot in the process.
Thanks ;) and hopefully you will recover 100% after your neck operation.
 
We are in need of some funding.
More details.

Thank you.

Members online

Back
Top