/** * Please use UserPreferenceHelper instead for correct handling of demo user's preferences! * * @see org.projectforge.business.user.UserXmlPreferencesMap#putEntry(String, Object, boolean) */ public void putEntry(final Integer userId, final String key, final Object value, final boolean persistent) { final UserXmlPreferencesMap data = ensureAndGetUserPreferencesData(userId); data.putEntry(key, value, persistent); checkRefresh(); // Should be called at the end of this method for considering changes inside this method. }
/** * Flushes the user settings to the database (independent from the expire mechanism). Should be used after the user's * logout. If the user data isn't modified, then nothing will be done. */ public void flushToDB(final Integer userId) { flushToDB(userId, true); }
/** * Forces to flush all user preferences to database. */ public void flushAllUserPrefsToDB() { userXmlPreferencesCache.forceReload(); }
PFUserDO user2 = getUser("user2"); logon(user1); userXmlPreferencesCache.putEntry(user1.getId(), "msg", "Hurzel", true); assertEquals("Hurzel", userXmlPreferencesCache.getEntry(user1.getId(), "msg")); UserXmlPreferencesMap data = userXmlPreferencesCache.ensureAndGetUserPreferencesData(user1.getId()); assertEquals(true, data.isModified()); // Because after getting it, it may be modified. userXmlPreferencesCache.refresh(); assertEquals(false, data.isModified()); userXmlPreferencesCache.putEntry(user1.getId(), "value", 42, true); assertEquals(true, data.isModified()); userXmlPreferencesCache.refresh(); assertEquals(false, data.isModified()); userXmlPreferencesCache.putEntry(user1.getId(), "application", "ProjectForge", false); assertEquals(false, data.isModified()); assertEquals("ProjectForge", userXmlPreferencesCache.getEntry(user1.getId(), "application")); try { userXmlPreferencesCache.putEntry(user2.getId(), "msg", "Hurzel2", true); fail("User 1 should not have access to entry of user 2"); } catch (AccessException ex) { userXmlPreferencesCache.putEntry(user2.getId(), "msg", "Hurzel2", true); assertEquals("Hurzel", userXmlPreferencesCache.getEntry(user1.getId(), "msg")); logon(user2); assertEquals("ProjectForge", userXmlPreferencesCache.getEntry(user1.getId(), "application"));
private void logout(final MySession mySession, final Cookie stayLoggedInCookie, final UserXmlPreferencesCache userXmlPreferencesCache) { final PFUserDO user = mySession.getUser(); if (user != null) { userXmlPreferencesCache.flushToDB(user.getId()); userXmlPreferencesCache.clear(user.getId()); } mySession.logout(); if (stayLoggedInCookie != null) { stayLoggedInCookie.setMaxAge(0); stayLoggedInCookie.setValue(null); stayLoggedInCookie.setPath("/"); } }
/** * Stores the given value for the current user. * * @param key * @param value * @param persistent If true, the object will be persisted in the database. * @see UserXmlPreferencesCache#putEntry(Integer, String, Object, boolean) */ public static void putEntry(final String key, final Object value, final boolean persistent) { final PFUserDO user = ThreadLocalUserContext.getUser(); if (user == null || value == null) { // Should only occur, if user is not logged in. return; } if (AccessChecker.isDemoUser(user) == true && value instanceof Serializable) { // Store user pref for demo user only in user's session. MySession.get().setAttribute(key, (Serializable) value); return; } try { getUserXmlPreferencesCache().putEntry(user.getId(), key, value, persistent); } catch (final Exception ex) { log.error("Should only occur in maintenance mode: " + ex.getMessage(), ex); } }
private Panel getSnowEffectPanel(final PageParameters parameters) { boolean enableSnowEffect = configurationService.isSnowEffectEnabled(); Boolean disableSnowEffectPermant = (Boolean) userXmlPreferencesCache.getEntry(ThreadLocalUserContext.getUserId(), "disableSnowEffectPermant"); if (disableSnowEffectPermant != null) { enableSnowEffect = disableSnowEffectPermant ? false : enableSnowEffect; } enableSnowEffect = (enableSnowEffect && parameters.get("snowEffectEnable") != null && parameters.get("snowEffectEnable").isEmpty() == false) ? parameters.get("snowEffectEnable").toBoolean() : enableSnowEffect; enableSnowEffect = enableSnowEffect && new Random().nextInt(100) >= 50; if (enableSnowEffect) { return new SnowEffectPanel("snowEffect"); } else { return new DivPanel("snowEffect"); } }
/** * Removes the entry under the given key. * * @param key * @return The removed entry if found. */ public static Object removeEntry(final String key) { final PFUserDO user = ThreadLocalUserContext.getUser(); if (user == null) { // Should only occur, if user is not logged in. return null; } if (AccessChecker.isDemoUser(user) == true) { MySession.get().removeAttribute(key); } return getUserXmlPreferencesCache().removeEntry(user.getId(), key); }
/** * Please use UserPreferenceHelper instead for correct handling of demo user's preferences! * * @see org.projectforge.business.user.UserXmlPreferencesMap#removeEntry(String) */ public Object removeEntry(final Integer userId, final String key) { final UserXmlPreferencesMap data = getUserPreferencesData(userId); if (data == null) { // Should only occur for the pseudo-first-login-user setting up the system. return null; } if (data.getPersistentData().containsKey(key) == true) { userXmlPreferencesDao.remove(userId, key); } else if (data.getVolatileData().containsKey(key) == false) { log.warn("Oups, user preferences object with key '" + key + "' is wether persistent nor volatile!"); } checkRefresh(); return data.removeEntry(key); }
@SuppressWarnings("unchecked") @Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW) public String migrateAllUserPrefs() { accessChecker.checkIsLoggedInUserMemberOfAdminGroup(); final StringBuffer buf = new StringBuffer(); final List<UserXmlPreferencesDO> list = (List<UserXmlPreferencesDO>) hibernateTemplate.find( "from " + UserXmlPreferencesDO.class.getSimpleName() + " t order by user.id, key"); int versionNumber = Integer.MAX_VALUE; for (final UserXmlPreferencesDO userPrefs : list) { buf.append(migrateUserPrefs(userPrefs)); if (userPrefs.getVersion() < versionNumber) { versionNumber = userPrefs.getVersion(); } } migrate(versionNumber); userXmlPreferencesCache.refresh(); return buf.toString(); }
/** * Please use UserPreferenceHelper instead for correct handling of demo user's preferences! * * @param userId * @return */ public synchronized UserXmlPreferencesMap ensureAndGetUserPreferencesData(final Integer userId) { UserXmlPreferencesMap data = getUserPreferencesData(userId); if (data == null) { data = new UserXmlPreferencesMap(); data.setUserId(userId); final List<UserXmlPreferencesDO> userPrefs = userXmlPreferencesDao.getUserPreferencesByUserId(userId); for (final UserXmlPreferencesDO userPref : userPrefs) { final Object value = userXmlPreferencesDao.deserialize(userId, userPref, true); data.putEntry(userPref.getKey(), value, true); } this.allPreferences.put(userId, data); } return data; }
@Override protected void onEvent(final AjaxRequestTarget target) { userXmlPreferencesDao.saveOrUpdate(ThreadLocalUserContext.getUserId(), "disableSnowEffectPermant", Boolean.TRUE, true); userXmlPreferencesCache.putEntry(ThreadLocalUserContext.getUserId(), "disableSnowEffectPermant", Boolean.TRUE, true); setResponsePage(getPage().getPageClass()); } }));
return value; value = getUserXmlPreferencesCache().getEntry(userId, key); if (value == null || value instanceof Serializable == false) { return null; return getUserXmlPreferencesCache().getEntry(userId, key); } catch (final Exception ex) { log.error("Should only occur in maintenance mode: " + ex.getMessage(), ex);
cache.removeEntry(user.getId(), "org.projectforge.plugins.ffp.wicket.FFPDebtListForm:Filter");
/** * Please use UserPreferenceHelper instead for correct handling of demo user's preferences! * * @see #ensureAndGetUserPreferencesData(Integer) */ public Object getEntry(final Integer userId, final String key) { final UserXmlPreferencesMap data = ensureAndGetUserPreferencesData(userId); checkRefresh(); return data.getEntry(key); }
/** * Forces to flush all user preferences to database. */ public void flushAllUserPrefsToDB() { userXmlPreferencesCache.forceReload(); }
/** * Stores the PersistentUserObjects in the database or on start up restores the persistent user objects from the * database. * * @see org.projectforge.framework.cache.AbstractCache#refresh() */ @Override protected void refresh() { log.info("Flushing all user preferences to data-base...."); for (final Integer userId : allPreferences.keySet()) { flushToDB(userId, false); } log.info("Flushing of user preferences to data-base done."); }
/** * @see org.projectforge.web.wicket.AbstractEditPage#afterSaveOrUpdate() */ @Override public AbstractSecuredBasePage afterSaveOrUpdate() { Collection<TeamCalDO> teamCalRestWhiteList = form.getTeamCalRestWhiteList(); Collection<TeamCalDO> teamCalRestBlackList = teamCalCache.getAllFullAccessCalendars(); teamCalRestBlackList.removeAll(teamCalRestWhiteList); Integer[] blackListIds = teamCalRestBlackList.stream().map(cal -> cal.getId()).toArray(size -> new Integer[size]); userXmlPreferencesDao.saveOrUpdate(ThreadLocalUserContext.getUserId(), TeamCalDO.TEAMCALRESTBLACKLIST, blackListIds, true); userXmlPreferencesDao.saveOrUpdate(ThreadLocalUserContext.getUserId(), "disableSnowEffectPermant", form.getDisableSnowEffectPermant(), true); userXmlPreferencesCache.putEntry(ThreadLocalUserContext.getUserId(), "disableSnowEffectPermant", form.getDisableSnowEffectPermant(), true); final HttpServletRequest request = WicketUtils.getHttpServletRequest(getRequest()); // Don't trust the form data, use logged in user from the data base instead. UserFilter.refreshUser(request); return super.afterSaveOrUpdate(); }
final RecentMobilePageInfo pageInfo = (RecentMobilePageInfo) userXmlPreferencesCache.getEntry(userId, AbstractSecuredMobilePage.USER_PREF_RECENT_PAGE); if (pageInfo != null && pageInfo.getPageClass() != null) {
@PreDestroy public void preDestroy() { log.info("Syncing all user preferences to database."); this.forceReload(); } }