Fundamental architecture of Parent & Child users and roles for an public Elementary school site

Events happening in the community are now at Drupal community events on www.drupal.org.
todd zebert's picture

The bottom-line is I'm looking for suggestions on how to relate Parents to Children (who in most cases won't have an account) so Teachers know whose kid is whose, and Children can be signed up for after-school enrichment classes and the like, etc.

I'm developing a site to replace (and greatly enhance) an existing iweb/.mac blog for our school, K-5. Given the ages of kids, they only have email addresses (gaggle.net) once they reach 4th and 5th grade. So, the site is primarily for parents to get info about the school, classes, PTA, sign up after-school enrichment classes, volunteering, events, etc. Only in the later grades will the kids be "using it."

I've created a couple sites and am comfortable with many of the modules, including CCK, Content Profiles, Views, UR, node relationships, etc. I'm getting familiar with OG and plan to use that to form Classes.

Going back to my question: I could make a View that displays on a class page that lists parents and children (from a CCK field), but what to do about multiple children in different classes? Then I thought about a tooltip that showed the children while hovering over the parents name, but I didn't find an easy way to do that (in any case, that would be helpful to a teacher but not really "solving" the problem).

Similar problems exist when attempting to use Ubercart to "buy" access for a child into an enrichment class (an OG group, with UC OG Subscribe).

To complicate matters, once the kids can get their own site account, the system has to work with that also.

Any suggestions would be greatly appreciated!! Thanks.

Comments

Might want to take a look at CiviSchool ...

lobo's picture

which addresses the above issue quite nicely (via CiviCRM) and permissioned relationships:

http://civicrm.org/civischool
http://wiki.civicrm.org/confluence/display/CRMDOC32/CiviSchool+Installation
http://wiki.civicrm.org/confluence/download/attachments/21627014/CiviSFS...

You can ping me on #civicrm IRC if you have any questions

lobo

CiviSchool

todd zebert's picture

Thanks @Lobo. I did uncover that and took a look at some links, but documentation (that I found) seemed pretty sparse and I couldn't figure out what it actually did. I saw a lot of applying for private school, which I don't need.

I'll definitely check these links.

There is an application form as part of CiviSchool ..

lobo's picture

which was contributed by IDEAL school (in manhattan). Basically you dont need to implement / use all the forms that are in place, you can pick and choose what functionality you'd like to use :)

lobo

Lobo, I use GoDaddy and I had

todd zebert's picture

Lobo,

I use GoDaddy and I had a subdomain with another drupal sandbox installed, and configured. I installed and configured civicrm 3.2.3, and related modules (cck, views, og, etc). And reviewed your civischool instructions.

Here I'm stuck because godaddy doesn't have Subversion nor does it seem easy, if even possible, to install. I found a binary but I need sudo which isn't avail.

I've looked at http://svn.civicrm.org/sfschool/trunk. Is there a packaged module? Can I do this manually without svn?

I also noticed there's an sfschool theme?

Thanks,
Todd

can we move this conversation to the civicrm forums ...

lobo's picture

easier for us to support the module there

there is no packaged module for it as yet.

lobo

your challenge is interesting so here are my thoughts

idcm's picture

Todd, have you considered node referencing and user referencing? Create a content type for site members. Since not all will have accounts, you won't be able to use the content profile. Anyway, here is the idea ...

Create a content type called members (or something like that). Include node reference field and user reference field. Also include any other fields that will collect other information about the individual.

Then, for each parent and child, create a node. From the parent node, reference the child node. If you use the reverse_node_reference module, a reverse relationship is automatically set up. Then, each time one of the parents or children create an account, connect their node to their account using user reference. Next, create an OG and "enroll" the student username in the OG.

Next, create a node view that filters on "members" CT. Next, show the fields you want to see. Maybe it is content: userref field (to show the username assigned to the node), content: noderef field (to show the family member related to the node), and the title of the node to get the "other" family reference. This much works. You get a list of child names and parents.

Now for the tricky part. You need to show only those nodes whose content: userref value equals the username in the OG. I believe you might need one or two arguments for this one. It might even take some PHP. I have not done this particular filtering before but maybe this will get you thinking?

Maybe someone else can take it from here? If you figure it out, I will let you know.

todd zebert's picture

Thanks idcm for your comment. I don't think my challenge is any different from any other elementary school as the younger students are only beginning to read and probably having them login would be challenging (not to mention no email addresses).

This is how I basically started out but decided to try other paths.

I'm not familiar with user reference, and forgive my notation, but let me see if I follow you at the beginning:

"Parent" user <-- "parent" member node <--> "student" member node ( --> "student" user)

The first part of your view seems reasonable but I'd have to actually do it to really grasp it. As for the tricky part, that makes sense to, but like you, I'm not sure if it's part of the View or code.

Even if all this way doable, I see a couple issues:
* Since the "student" user is optional (depending on grade) I could not enroll/join them to an OG if they don't exist.
* The parents wouldn't be able to "see" the OG class (or get updates) as they aren't members, or if they were, a class of 30 kids could have nearly a 100 members. The parent/student "key" View would be helpful, but just a bandaid.

There's so many variations on this idea but none of them seem compelling.

It's like I need an "act on behalf of"/delegate module. I haven't found anything searching the comes close.

Thanks,
Todd

ah, well you have a

idcm's picture

ah, well you have a challenge. Do they not have accts because they don't have email addresses? I am not familiar with student log on issues. If it is an email thing, they don't have to have a valid email to have an account. They just need a valid looking email. They don't even have to log in. You create an acct for each student, pretend email, and then use that username to register them in the OG - of course if there is a legal thing then never mind.

I considered "dummy" accounts

todd zebert's picture

I considered "dummy" accounts but the whole thing seemed like too much of a hack that would be difficult to use and support in the long term.

Contacts table

brendanxc's picture

Hi Todd,

I'm working on a student information system, and we ran into this same problem of representing people in the system who don't have accounts. CiviCRM seemed like overkill, so we thought about a more lightweight contacts system.

Using node/user reference could be on option, but we have, for now, built this using custom tables and lots of views integration. I'd like to get our module cleaned up and submitted if this is approach makes sense, so any input would be helpful.

Each person in the system is considered a "contact" and is represented by a node-based profile. There is a general "contact" node type, but also specialized node types for "student" and "teacher" that contain additional CCK fields.

We added a custom "contacts" table, which contains the node id of the profile, name fields for prefix/first/middle/last/suffix, and an optional user ID, for cases where the user has an account. Relationships between contacts are stored in a contact_relationships table, which links one profile node ID to another along with a relationship type (such as Parent, Sibling, or Primary Contact, Contact, etc.)

The tables are all views-integrated, and views relationship handlers will pull the profile CCK fields into a user view, or user fields into a node-based profile view.

We've been considering, though, whether to just link the profile nodes to user accounts via user reference, and handle the contact name fields within the profile.

What's your timeframe on getting this done?

EDIT: In our system, when a profile is created, a user account can be created automatically. An email address and account name can be generated based on the student's name, and accounts can be disabled for login purposes. These could effectively be dummy user accounts (disabled, fake email, generated username) and the uids could be used with OG, which we're also using with context/features/spaces. OG views can be modified to use the contacts name instead of username.

check out this module

That would be perfect for

brendanxc's picture

That would be perfect for this, and maybe it's a better choice. The catch is that it makes user accounts required. Ideally, there would be a true contact/people system that permits records to exist without them being user accounts.

In Drupal 7 this is probably best done with a new entity type, contact, that isn't a user or a node, but that could be related to either.

"CiviLite" sounds great

todd zebert's picture

@brendanxc Sounds like you're well on your way. We'd like to have the system in rolling out in part by the beginning of the year and in full production by midway through school year, about beginning of Feb. I'd try to use UserRef if only because it's already well established.

And while CiviSchool has the necessary contact registration (it seems) for parents registering children, when I looked at some method like you're creating, I would want the contact to integrate with established modules like Event and Signup and Ubercart - this is where my plan fell apart.

@artatac I checked out UR and while it seems useful, and well integrated, I had one problem with it for this use, as @brendanxc did: users had to request and approve relationships. It couldn't be done administratively. Perhaps there's hooks to extend for this functionality?

Drupal in Education

Group organizers

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: