use of org.olat.core.util.UserSession in project OpenOLAT by OpenOLAT.
the class NewControllerFactory method launch.
/**
* Launch a controller in a tab or site in the given window from a user
* request url
*
* @param ureq
* @param wControl
*/
public boolean launch(UserRequest ureq, WindowControl wControl) {
BusinessControl bc = wControl.getBusinessControl();
ContextEntry mainCe = bc.popLauncherContextEntry();
if (mainCe == null) {
// nothing to launch
return false;
}
OLATResourceable ores = mainCe.getOLATResourceable();
// Check for RepositoryEntry resource
RepositoryEntry re = null;
if (ores.getResourceableTypeName().equals(OresHelper.calculateTypeName(RepositoryEntry.class))) {
if (ores instanceof RepositoryEntry) {
re = (RepositoryEntry) ores;
ores = re.getOlatResource();
} else {
// It is a repository-entry => get OLATResourceable from RepositoryEntry
RepositoryManager repom = RepositoryManager.getInstance();
re = repom.lookupRepositoryEntry(ores.getResourceableId());
if (re != null) {
ores = re.getOlatResource();
mainCe.upgradeOLATResourceable(re);
}
}
}
// was brasato:: DTabs dts = wControl.getDTabs();
UserSession usess = ureq.getUserSession();
Window window = Windows.getWindows(usess).getWindow(ureq);
if (window == null) {
log.debug("Found no window for jumpin => take WindowBackOffice", null);
window = wControl.getWindowBackOffice().getWindow();
}
DTabs dts = window.getDTabs();
String firstType = mainCe.getOLATResourceable().getResourceableTypeName();
// String firstTypeId = ClassToId.getInstance().lookup() BusinessGroup
ContextEntryControllerCreator typeHandler = getContextEntryControllerCreator(firstType);
if (typeHandler == null) {
log.warn("Cannot found an handler for context entry: " + mainCe, null);
// simply return and don't throw a red screen
return false;
}
if (!typeHandler.validateContextEntryAndShowError(mainCe, ureq, wControl)) {
// simply return and don't throw a red screen
return false;
}
List<ContextEntry> entries = new ArrayList<ContextEntry>(5);
while (bc.hasContextEntry()) {
entries.add(bc.popLauncherContextEntry());
}
List<ContextEntry> ces = new ArrayList<ContextEntry>(entries.size() + 1);
ces.add(mainCe);
if (entries.size() > 0) {
ces.addAll(entries);
}
TabContext context = typeHandler.getTabContext(ureq, ores, mainCe, entries);
String siteClassName = typeHandler.getSiteClassName(ces, ureq);
// open in existing site
boolean launched = false;
boolean assessmentMode = usess.isInAssessmentModeProcess();
if (siteClassName != null) {
if (!assessmentMode) {
dts.activateStatic(ureq, siteClassName, context.getContext());
launched = true;
}
} else if (!assessmentMode || usess.matchLockResource(ores)) {
// get current tab or create new tab
DTab dt = dts.getDTab(ores);
if (dt == null) {
WindowControl bwControl = BusinessControlFactory.getInstance().createBusinessWindowControl(bc, dts.getWindowControl());
usess.addToHistory(ureq, bc);
Controller launchC = typeHandler.createController(ces, ureq, bwControl);
if (launchC != null) {
dt = dts.createDTab(context.getTabResource(), re, launchC, context.getName());
if (dt == null) {
launched = false;
} else if (dts.addDTab(ureq, dt)) {
dts.activate(ureq, dt, context.getContext());
launched = true;
}
}
} else {
dts.activate(ureq, dt, context.getContext());
launched = true;
}
}
return launched;
}
use of org.olat.core.util.UserSession in project OpenOLAT by OpenOLAT.
the class ResumeSessionController method isResumeInteractionRequired.
private Redirect isResumeInteractionRequired(UserRequest ureq) {
UserSession usess = ureq.getUserSession();
Redirect option;
if (isREST(ureq)) {
String url = getRESTRedirectURL(ureq);
option = new Redirect(url);
} else if (!historyModule.isResumeEnabled()) {
String url = toUrl(getLandingBC(ureq));
option = new Redirect(url);
} else if (usess.getRoles().isGuestOnly()) {
String url = toUrl(getLandingBC(ureq));
option = new Redirect(url);
} else {
Preferences prefs = usess.getGuiPreferences();
String resumePrefs = (String) prefs.get(WindowManager.class, "resume-prefs");
if (!StringHelper.containsNonWhitespace(resumePrefs)) {
resumePrefs = historyModule.getResumeDefaultSetting();
}
if ("none".equals(resumePrefs)) {
String url = toUrl(getLandingBC(ureq));
option = new Redirect(url);
} else if ("auto".equals(resumePrefs)) {
HistoryPoint historyEntry = HistoryManager.getInstance().readHistoryPoint(ureq.getIdentity());
if (historyEntry != null && StringHelper.containsNonWhitespace(historyEntry.getBusinessPath())) {
List<ContextEntry> cloneCes = BusinessControlFactory.getInstance().cloneContextEntries(historyEntry.getEntries());
String bc = BusinessControlFactory.getInstance().getAsRestPart(cloneCes, true);
option = new Redirect(bc);
} else {
String url = toUrl(getLandingBC(ureq));
option = new Redirect(url);
}
} else if ("ondemand".equals(resumePrefs)) {
HistoryPoint historyEntry = historyManager.readHistoryPoint(ureq.getIdentity());
if (historyEntry != null && StringHelper.containsNonWhitespace(historyEntry.getBusinessPath())) {
List<ContextEntry> cloneCes = BusinessControlFactory.getInstance().cloneContextEntries(historyEntry.getEntries());
String url = BusinessControlFactory.getInstance().getAsRestPart(cloneCes, true);
String landingPage = getLandingBC(ureq);
option = new Redirect(url, landingPage);
} else {
String url = toUrl(getLandingBC(ureq));
option = new Redirect(url);
}
} else {
String url = toUrl(getLandingBC(ureq));
option = new Redirect(url);
}
}
return option;
}
use of org.olat.core.util.UserSession in project OpenOLAT by OpenOLAT.
the class BaseFullWebappController method activate.
/**
* Activating a tab is like focusing a new window - we need to adjust the
* guipath since e.g. the button triggering the activation is not
* part of the guipath, but rather the new tab in its initial state.
* in all other cases the "focus of interest" (where the calculation of the
* guipath is started) matches the controller which listens to the
* event caused by a user interaction.
* this is the starting point.
*/
@Override
public void activate(UserRequest ureq, DTab dTab, List<ContextEntry> entries) {
UserSession usess = ureq.getUserSession();
if ((lockStatus != null || usess.isInAssessmentModeProcess()) && !usess.matchLockResource(dTab.getOLATResourceable())) {
return;
}
// update window settings if needed
setWindowSettings(getWindowControl().getWindowBackOffice().getWindowSettings());
// jump here via external link or just open a new tab from e.g. repository
if (dTab == null && contentCtrl instanceof Activateable2) {
((Activateable2) contentCtrl).activate(ureq, entries, null);
} else {
DTabImpl dtabi = (DTabImpl) dTab;
Controller c = dtabi.getController();
if (c == null) {
throw new AssertException("no controller set yet! " + dTab);
}
doActivateDTab(dtabi);
if (c instanceof Activateable2) {
final Activateable2 activateable = ((Activateable2) c);
activateable.activate(ureq, entries, null);
}
updateBusinessPath(ureq, dtabi);
// update the panels after activation
setGuiStack(dtabi.getGuiStackHandle());
}
}
use of org.olat.core.util.UserSession in project OpenOLAT by OpenOLAT.
the class UserSessionInformationsController method getUsersSessionAsString.
private String getUsersSessionAsString() {
StringBuilder sb = new StringBuilder(50000);
int ucCnt = sessionManager.getUserSessionsCnt();
Set<UserSession> usesss = sessionManager.getAuthenticatedUserSessions();
int contcnt = DefaultController.getControllerCount();
sb.append("total usersessions (auth and non auth): " + ucCnt + "<br />auth usersessions: " + usesss.size() + "<br />Total Controllers (active, not disposed) of all users:" + contcnt + "<br /><br />");
for (Iterator<UserSession> iter = usesss.iterator(); iter.hasNext(); ) {
UserSession usess = iter.next();
Identity iden = usess.getIdentity();
sb.append("authusersession (").append(usess.hashCode()).append(") of ");
if (iden != null) {
sb.append(iden.getName()).append(" ").append(iden.getKey());
} else {
sb.append(" - ");
}
sb.append("<br />");
Windows ws = Windows.getWindows(usess);
for (Iterator<Window> iterator = ws.getWindowIterator(); iterator.hasNext(); ) {
Window window = iterator.next();
sb.append("- window ").append(window.getDispatchID()).append(" ").append(window.getLatestDispatchComponentInfo()).append("<br />");
}
sb.append("<br />");
}
return sb.toString();
}
use of org.olat.core.util.UserSession in project OpenOLAT by OpenOLAT.
the class MapperDispatcher method execute.
/**
* @param hreq
* @param hres
*/
@Override
public void execute(HttpServletRequest hreq, HttpServletResponse hres) throws IOException {
String pathInfo = DispatcherModule.subtractContextPath(hreq);
// e.g. non-cacheable: 23423/bla/blu.html
// e.g. cacheable: my.mapper.path/bla/blu.html
String subInfo = pathInfo.substring(DispatcherModule.PATH_MAPPED.length());
int slashPos = subInfo.indexOf('/');
String smappath;
if (slashPos == -1) {
smappath = subInfo;
} else {
smappath = subInfo.substring(0, slashPos);
}
// legacy???
DBFactory.getInstance().commitAndCloseSession();
// e.g. non-cacheable: 23423
// e.g. cacheable: my.mapper.path
UserSession usess = CoreSpringFactory.getImpl(UserSessionManager.class).getUserSession(hreq);
Mapper m = CoreSpringFactory.getImpl(MapperService.class).getMapperById(usess, smappath);
if (m == null) {
// an anonymous mapper?
m = CoreSpringFactory.getImpl(MapperService.class).getMapperById(null, smappath);
if (m == null) {
logWarn("Call to mapped resource, but mapper does not exist for path::" + smappath, null);
DispatcherModule.sendNotFound(pathInfo, hres);
return;
}
}
String mod = slashPos > 0 ? subInfo.substring(slashPos) : "";
if (mod.indexOf("..") != -1) {
logWarn("Illegal mapper path::" + mod + " contains '..'", null);
DispatcherModule.sendForbidden(pathInfo, hres);
return;
}
// /bla/blu.html
MediaResource mr = m.handle(mod, hreq);
ServletUtil.serveResource(hreq, hres, mr);
}
Aggregations