package org.sakaiproject.portal.charon.handlers;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.sakaiproject.authz.cover.SecurityService;
import org.sakaiproject.event.api.NotificationService;
import org.sakaiproject.event.cover.EventTrackingService;
import org.sakaiproject.portal.api.PortalHandlerException;
import org.sakaiproject.site.cover.SiteService;
import org.sakaiproject.tool.api.Session;
import org.sakaiproject.util.Web;
public class RoleSwitchOutHandler extends BasePortalHandler
{
private static final String URL_FRAGMENT = "role-switch-out";
public static final String EVENT_ROLESWAP_EXIT = "roleswap.exit";
public RoleSwitchOutHandler()
{
setUrlFragment(RoleSwitchOutHandler.URL_FRAGMENT);
}
@Override
public int doGet(String[] parts, HttpServletRequest req, HttpServletResponse res,
Session session) throws PortalHandlerException
{
if (parts == null || req == null || res == null || session == null)
throw new IllegalStateException("null pointers while swapping out of student view");
if ((parts.length > 2) && "role-switch-out".equals(parts[1]))
{
try
{
String siteUrl = req.getContextPath() + "/site"
+ Web.makePath(parts, 2, parts.length);
// Make sure to add the parameters such as panel=Main
String queryString = req.getQueryString();
if (queryString != null)
{
siteUrl = siteUrl + "?" + queryString;
}
portalService.setResetState("true"); // flag the portal to reset
SecurityService.clearUserEffectiveRole(SiteService.siteReference(parts[2]));
// Post an event
EventTrackingService.post(EventTrackingService.newEvent(EVENT_ROLESWAP_EXIT, null, parts[2], false, NotificationService.NOTI_NONE));
res.sendRedirect(siteUrl);
return RESET_DONE;
}
catch (Exception ex)
{
throw new PortalHandlerException(ex);
}
}
else
{
return NEXT;
}
}
}