[Building Sakai] New web service for site membership status

Nicola Monat-Jacobs nicola at longsight.com
Tue Apr 13 14:37:24 PDT 2010


Thanks to Noah and Zhen - unfortunately siteService.save() didn't work, but AuthzGroupService.save() did, so I had to tweak it like so:

public String setMemberStatus(String sessionid, String siteid, String eid, boolean active) throws AxisFault { 
	
	Session s = establishSession(sessionid); 
	
	try {
		AuthzGroup site = AuthzGroupService.getAuthzGroup("/site/"+siteid);

		String userid = UserDirectoryService.getUserByEid(eid).getId();
		Member membership = site.getMember(userid);

		if (membership.isActive() && !active) {
			LOG.error("membership is active but we want it to be inactive");
			membership.setActive(false);
		} else if (!membership.isActive() && active) {
			LOG.error("membership is inactive, but we want it to be active");
			membership.setActive(true);
		}
		AuthzGroupService.save(site);
		
	} catch (Exception e) {
		LOG.error("WS setMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
		return "";
	}
	
	return "success";
}


On Apr 13, 2010, at  1:55 PM, Noah Botimer wrote:

> Nicola,
> 
> You'll need to pass the site back to the site service to commit the changes. That is, something like this:
> 
> 		if (membership.isActive() && !active) {
> 			LOG.error("membership is active but we want it to be inactive");
> 			membership.setActive(false);
> 		} else if (!membership.isActive() && active) {
> 			LOG.error("membership is inactive, but we want it to be active");
> 			membership.setActive(true);
> 		}
> 		siteService.save(site);
> 
> Thanks,
> -Noah
> 
> On Apr 13, 2010, at 4:18 PM, Nicola Monat-Jacobs wrote:
> 
>> Hi -
>> 
>> I'm working on a new simple sakai web service that would allow me to remotely get and set the status of a user's enrollment in a site - active or inactive. The get method works great, however the set method doesn't seem to be working - the status of the user's enrollment doesn't change. I'd love to know if anyone has any thoughts on why this might not be working. Oh, this is a sakai 2-6-x install. Thanks!
>> 
>> Here's my jws code:
>> 
>> /** 
>>  * Get the status (active vs inactive) of a user's enrollment (membership) in a site
>>  *
>>  * @param	sessionid	the id of a valid session
>>  * @param	siteId		the id of the site you want to check 
>>  * @param	eid			the userid of the person you want to check
>>  * @return		        active, inactive, blank or error
>>  * @throws	AxisFault		
>>  *
>>  */
>> public String getMemberStatus(String sessionid, String siteid, String eid) throws AxisFault { 
>> 	
>> 	Session s = establishSession(sessionid); 
>> 	
>> 	String status = "";
>> 	
>> 	try {
>> 		Site site = SiteService.getSite(siteid);
>> 
>> 		String userid = UserDirectoryService.getUserByEid(eid).getId();
>> 		Member membership = site.getMember(userid);
>> 
>> 		if (membership.isActive()) {
>> 			status = "active";
>> 		} else {
>> 			status = "inactive";
>> 		}
>> 		
>> 	} catch (Exception e) {
>> 		LOG.error("WS getMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
>> 		return "";
>> 	}
>> 	
>> 	return status;
>> }
>> 
>> 
>> /** 
>>  * Set the status of a user's enrollment (membership) in a site to either active or inactive
>>  *
>>  * @param	sessionid	the id of a valid session
>>  * @param	siteId		the id of the site 
>>  * @param	eid			the userid of the person whose status you want to set
>>  * @param	active		true = active, false = inactive
>>  * @return		        success or exception
>>  * @throws	AxisFault		
>>  *
>>  */
>> public String setMemberStatus(String sessionid, String siteid, String eid, boolean active) throws AxisFault { 
>> 	
>> 	Session s = establishSession(sessionid); 
>> 	
>> 	try {
>> 		Site site = SiteService.getSite(siteid);
>> 
>> 		String userid = UserDirectoryService.getUserByEid(eid).getId();
>> 		Member membership = site.getMember(userid);
>> 
>> 		if (membership.isActive() && !active) {
>> 			LOG.error("membership is active but we want it to be inactive");
>> 			membership.setActive(false);
>> 		} else if (!membership.isActive() && active) {
>> 			LOG.error("membership is inactive, but we want it to be active");
>> 			membership.setActive(true);
>> 		}
>> 		
>> 	} catch (Exception e) {
>> 		LOG.error("WS setMemberStatus(): "+ e.getClass().getName() + " : "+ e.getMessage());
>> 		return "";
>> 	}
>> 	
>> 	return "success";
>> }
>> 
>> 
>> And here's the demo perl script that I'm using to test it:
>> 
>> !/usr/bin/perl
>> use SOAP::Lite;
>> my $host='http://localhost:8080';
>> 
>> my $soap = SOAP::Lite -> proxy("$host/sakai-axis/SakaiLogin.jws?wsdl");
>> my $result =$soap->login("admin","admin");
>> my $session=$result->result();
>> print $session."\n\n";
>> 
>> my $true = SOAP::Data->value('true')->type('boolean');
>> my $false = SOAP::Data->value('')->type('boolean');
>> 
>> my $soap2 = SOAP::Lite -> proxy("$host/sakai-axis/WSLongsight.jws?wsdl");
>> 
>> my $result2 = $soap2->setMemberStatus($session,
>> 	"39760797-6184-4b84-892f-e93041e2bcf1",
>> 	"joe",
>> 	$true);
>> 	
>> print $result2->result();
>> 
>> 
>> _______________________________________________
>> sakai-dev mailing list
>> sakai-dev at collab.sakaiproject.org
>> http://collab.sakaiproject.org/mailman/listinfo/sakai-dev
>> 
>> TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe at collab.sakaiproject.org with a subject of "unsubscribe"
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://collab.sakaiproject.org/pipermail/sakai-dev/attachments/20100413/e3d4bba5/attachment.html 


More information about the sakai-dev mailing list