Forum .LRN Q&A: What are user-profile and profile-provider?

Is there any documentation on these two packages, if yes could someone please kindly point me to the location?

If they do what is suggested in this thread: https://openacs.org/bboard/q-and-a-fetch-msg.tcl?msg_id=0004z3 then it would be nice to integrate them in the OpenACS core, no? Any news on the status?

Or any other pointers on how to extend a user's profile information with site specific data?

tilmann,

i created profile-provider to allow presentation of profile information about a user, in the community-member page for example, without knowing intimate details about who is providing profile data. that way we can make the community-member page a lot better by just having it defer presentation of package specific data, say forums or dotlrn, to that package. right now all that data is either very generic, from the acs_objects table, or we have to stick knowledge of the application in the community-member page which is very bad.

so all this is well and good except it's not being used anywhere yet and therefore the contract itself has not been developed. right now it only has a few operations that are probably broken, that is they probably need to have different set of arguments, and probably more operations are needed.

dotlrn user types are profiled_groups (not regular groups). profiled_groups are simply groups that are associated with an implementation of the profile-provider contract. so "professors," "students," "admins," etc all implement the profile-provider contract, they are just not doing anything with it right now.

user-profile is only an extension of the membership_rel so that we know which rels have a profile-provider associated with them.

it would be nice to start using this so it can be finished and used appropriately or determine whether this stuff is useless and needs to be pulled out.

if it turns out that this is the proper way to do this it should probably go in the OpenACS core.

let me be a little more clear about how i envisioned it functioning. the community-member would call an operation on all implementations of the profile_provider contract passing it a party_id, something like this:


	foreach implementation of profile_provider {
		call implementation::show_profile -party_id $party_id
	}

this would, for example, call the forums implementation of profile_provider which would display the posts made by that party_id that should be shown in the community-member page.

a thought i just had: it might be useful to have profile_providers register with profile_listeners (like the community-member page) so that a listener does not have to display all profile_providers, only the ones that are registered with it. i don't know about this actually it's starting to not sound like a good idea but i'll leave it in the post to see what others think.

Collapse
Posted by Don Baccus on
This service contract-based approach certainly sounds right, even if the operations are wrong/missing, arguments wrong, stuff broken etc as Yon says :)
Collapse
Posted by Tilmann Singer on
Thanks for the clarification.

In acs 3.x there was this listing of areas that the current user has admin rights for which I already found very valuable - this sounds as if it is going to be much more useful, when adopted more widely.

I was actually looking for an answer to the question posted in the original thread, how to extend the users information with site specific attributes - I guess I'll just follow the suggestion there and create a table linked to the users table.

Collapse
Posted by Rafael Calvo on
I am looking at how something like this could be used to generate an "expertise database". This is what people in knowledge management call it when you can identify who is good in what, in an organization.
A profile would have a number of attributes that are "static" (contact details, date of birth, educational history) and some would be dynamic maybe provided as a service contract, as Yon suggests.
user
   contact details
       address
       email
       ...
   
   Education
        degree1
        degree2
        course1
        course2

   Administration
         Proj Manager of 1
         Proj Manager of 2

   Expertise categories
         categ 1
         categ 2

   Dynamic
          bboard
               post 1
               post 2...
          file storage
                file1
                file2...

Is this what others are thinking? Any ideas?
Yon,

in the thought you had above would the profile_listeners (e.g. the community members page) be able to pull data dependent on what the individual user viewing the page is allowed to see (if possible please explain this to me based on the forums implementation of the profile_provider you mention as an example above)?