While CCK can create select boxes, it doesn't let you define precisely what should go in that select box based on the result of an abstract database query - i.e., you can't tell it to list all users with role "student".
Yes you can. You can use any View to build the Select options, and that includes a View of Users filtered by role.
While the FriendList module allows users to create relationships between themselves, it doesn't allow for user A to create a relationship between users B and C - either user B or user C would have to create the relationship. In other words, a school administrator could not create a relationship between a teacher and his student.
I cannot speak to FriendList, but using Content Profile with CCK's Node Reference and CCK's Content Permissions should let you replicate most of what you are talking about.
Comments
Comment #1
jim0203 commentedThanks for these points. With regards to the first one, I've now dug around some more with CCK and found that you can use the User Reference field type - is this what you were thinking of, or is there a way that any View can be used? I was going to write this functionality and integrate it with what I've got here, so it's good to know I don't have to =).
As for the second point, it is possible to get pretty close to the functionality I wanted with Content Profile, Node Reference, etc, but I was never quite satisfied with it - content profile seemed to overcomplicate the user registration process a little, when I just wanted to add one field to the user registration form.
As I develop the module I'll try and integrate it more with existing modules - I realise I've duplicated functionality at various points. I think it will end up splintering into a few different modules, perhaps the main one of which being a user relationship API. Comments like this are really useful as I work on this, so thanks once again.
Comment #2
Grayside commentedThe problem with User Reference is you cannot attach that to Users (as far as I know), meaning you are limited to Node ⇒ User relationships. That's why I went on to describe Node Reference & Content Profile some.
If that kind of structure is sufficient, so much the better.
Compatibility with CCK will save you a lot of time on module integrations, and make the upgrade to D7 easier.