added user prefs grabbing
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 24 Aug 2005 21:05:07 +0000 (21:05 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 24 Aug 2005 21:05:07 +0000 (21:05 +0000)
user preferred skin is automatically loaded

git-svn-id: svn://svn.open-ils.org/ILS/trunk@1720 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/opac/common/js/config.js
Open-ILS/web/opac/common/js/init.js
Open-ILS/web/opac/common/js/opac_utils.js
Open-ILS/web/opac/skin/default/js/sidebar.js

index 833bf55..8fc5f10 100644 (file)
@@ -1,22 +1,42 @@
 /* Export some constants  ----------------------------------------------------- */
 
-/* URL params */
-var PARAM_TERM                                 = "term";               /* search term */
-var PARAM_STYPE                                = "stype";              /* search type */
-var PARAM_LOCATION                     = "location"    /* current location */;
-var PARAM_DEPTH                                = "depth";              /* search depth */
-var PARAM_FORM                                 = "format";             /* search format */
-var PARAM_OFFSET                               = "offset";             /* search offset */
-var PARAM_COUNT                                = "count";              /* hits per page */
-var PARAM_HITCOUNT                     = "hitcount";   /* hits per page */
-var PARAM_MRID                                 = "mrid";               /* metarecord id */
-var PARAM_RID                                  = "rid";                        /* record id */
+/* URL param names */
+var PARAM_TERM                 = "term";               /* search term */
+var PARAM_STYPE                = "stype";              /* search type */
+var PARAM_LOCATION     = "location"    /* current location */;
+var PARAM_DEPTH                = "depth";              /* search depth */
+var PARAM_FORM                 = "format";             /* search format */
+var PARAM_OFFSET               = "offset";             /* search offset */
+var PARAM_COUNT                = "count";              /* hits per page */
+var PARAM_HITCOUNT     = "hitcount";   /* hits per page */
+var PARAM_MRID                 = "mrid";               /* metarecord id */
+var PARAM_RID                  = "rid";                        /* record id */
+var PARAM_ORIGLOC              = "orgloc"              /* the original location */
+
+/* URL param values (see comments above) */
+var TERM;  
+var STYPE;  
+var LOCATION;  
+var DEPTH;  
+var FORM; 
+var OFFSET;
+var COUNT;  
+var HITCOUNT;  
+var RANKS; 
+var FONTSIZE;
+var ORIGLOC;
+
+/* cookie values */
+var SBEXTRAS; 
+var SKIN;
+
 
 /* cookies */
 var COOKIE_SB = "sbe";
 var COOKIE_SES = "ses";
 var COOKIE_IDS = "ids";
 var COOKIE_FONT = "fnt";
+var COOKIE_SKIN = "skin";
 
 /* these are the actual param values - set on page load */
 
@@ -29,11 +49,11 @@ var ADVANCED        = "advanced";
 var HOME                       = "home";
 
 /* search type (STYPE) options */
-STYPE_AUTHOR   = "author";
-STYPE_TITLE            = "title";
-STYPE_SUBJECT  = "subject";
-STYPE_SERIES   = "series";
-STYPE_KEYWORD  = "keyword";
+var STYPE_AUTHOR       = "author";
+var STYPE_TITLE                = "title";
+var STYPE_SUBJECT      = "subject";
+var STYPE_SERIES       = "series";
+var STYPE_KEYWORD      = "keyword";
 
 
 /* container for global variables shared accross pages */
@@ -88,7 +108,6 @@ config.page[RDETAIL]         = "rdetail.xml";
 /* themes */
 config.themes = {};
 
-
 /* set up images  */
 config.images = {};
 config.images.logo = "main_logo.jpg";
@@ -161,6 +180,8 @@ var FETCH_SESSION                           = "open-ils.auth:open-ils.auth.session.retrieve";
 var LOGIN_INIT                                 = "open-ils.auth:open-ils.auth.authenticate.init";
 var LOGIN_COMPLETE                     = "open-ils.auth:open-ils.auth.authenticate.complete";
 var LOGIN_DELETE                               = "open-ils.auth:open-ils.auth.session.delete";
+var FETCH_USER_PREFS                   = "open-ils.actor:open-ils.actor.patron.settings.retrieve"; 
+var UPDATE_USER_PREFS          = "open-ils.actor:open-ils.actor.patron.settings.update"; 
 /* ---------------------------------------------------------------------------- */
 
 
index aeabaf7..57418d0 100644 (file)
@@ -7,21 +7,16 @@ attachEvt("common", "init", loadUIObjects);
 attachEvt("common", "init", initParams);
 attachEvt("common", "init", initCookies);
 attachEvt("common", "init", drawOrgTree); 
-attachEvt("common", "unload", _tree_killer);
-attachEvt("common", "unload", clearUIObjects);
-attachEvt("common", "unload", cleanRemoteRequests);
+
+//attachEvt("common", "unload", _tree_killer);
+//attachEvt("common", "unload", clearUIObjects);
+//attachEvt("common", "unload", cleanRemoteRequests);
 
 function init() {
        runEvt('common','init');
        setFontSize(getFontSize());
        runEvt("common", "run");
-
-       /*
-       switch(findCurrentPage()) {
-               case MRESULT: runEvt('mresult', 'run'); break;
-               case RRESULT: runEvt('rresult', 'run'); break;
-       }
-       */
+       checkUserSkin();
 }
 
 function windowUnload() { runEvt("common", "unload"); }
index 98d599b..9fb22ee 100644 (file)
@@ -24,15 +24,13 @@ function _showCanvas() {
        G.ui.searchbar.text.focus(); 
 }
 
-var newCanvasNode;
-function swapCanvas(newNode) { newCanvasNode = newNode; setTimeout(_swapCanvas, 200); }
-function _swapCanvas() {
+function swapCanvas(newNode) {
        for( var x in G.ui.altcanvas ) 
                hideMe(G.ui.altcanvas[x]);
 
        hideMe(G.ui.common.loading);
        hideMe(G.ui.common.canvas_main);
-       unHideMe(newCanvasNode);
+       unHideMe(newNode);
 }
 
 /* finds the name of the current page */
@@ -66,9 +64,6 @@ function findCurrentPage() {
 
 
 /* sets all of the params values  ----------------------------- */
-var TERM,  STYPE,  LOCATION,  DEPTH,  FORM, OFFSET,  COUNT,  
-        HITCOUNT,  RANKS, SEARCHBAR_EXTRAS, FONTSIZE;
-
 function initParams() {
        var cgi = new CGI();    
 
@@ -77,6 +72,7 @@ function initParams() {
        FORM    = cgi.param(PARAM_FORM);
 
        LOCATION        = parseInt(cgi.param(PARAM_LOCATION));
+       ORIGLOC = parseInt(cgi.param(PARAM_ORIGLOC));
        DEPTH           = parseInt(cgi.param(PARAM_DEPTH));
        OFFSET  = parseInt(cgi.param(PARAM_OFFSET));
        COUNT           = parseInt(cgi.param(PARAM_COUNT));
@@ -90,15 +86,16 @@ function initParams() {
        if(isNaN(OFFSET))               OFFSET  = 0;
        if(isNaN(COUNT))                COUNT           = 10;
        if(isNaN(HITCOUNT))     HITCOUNT        = 0;
-       if(isNaN(SEARCHBAR_EXTRAS))     SEARCHBAR_EXTRAS        = 0;
        if(isNaN(MRID))         MRID            = 0;
        if(isNaN(RID))                  RID             = 0;
+       if(isNaN(ORIGLOC))      ORIGLOC = 0;
 }
 
 function initCookies() {
        FONTSIZE = "medium";
        var font = fontCookie.get(COOKIE_FONT);
        if(font) FONTSIZE = font;
+       SKIN = skinCookie.get(COOKIE_SKIN);
 }
 
 /* URL param accessors */
@@ -110,11 +107,13 @@ function getForm(){return FORM;}
 function getOffset(){return OFFSET;}
 function getDisplayCount(){return COUNT;}
 function getHitCount(){return HITCOUNT;}
-function getSearchBarExtras(){return SEARCHBAR_EXTRAS;}
 function getMrid(){return MRID;};
 function getRid(){return RID;};
+function getOrigLocation(){return ORIGLOC;}
 
+function getSearchBarExtras(){return SBEXTRAS;}
 function getFontSize(){return FONTSIZE;};
+function getSkin(){return SKIN;};
 
 
 
@@ -271,6 +270,17 @@ function grabUser(ses, force) {
 
 }
 
+/* sets the 'prefs' field of the user object to their preferences 
+       and returns the preferences */
+function grabUserPrefs(user, force) {
+       if(user == null) user = G.user;
+       if(!force && user.prefs) return user.prefs;     
+       var req = new Request(FETCH_USER_PREFS, user.session, user.id());
+       req.send(true);
+       user.prefs = req.result();
+       return user.prefs;
+}
+
 function grabFleshedUser() {
 
        if(!G.user || !G.user.session) {
@@ -299,6 +309,59 @@ function grabFleshedUser() {
        return G.user;
 }
 
+var skinCookie = new cookieObject("skin", 1, "/", COOKIE_SKIN);
+function checkUserSkin(new_skin) {
+
+       var user_skin = getSkin();
+       var cur_skin = grabSkinFromURL();
+
+       if(new_skin) user_skin = new_skin;
+
+       if(isNull(user_skin)) {
+
+               if(grabUser()) {
+                       if(grabUserPrefs()) {
+                               user_skin = G.user.prefs["opac.skin"];
+                               skinCookie.put( COOKIE_SKIN, user_skin );
+                               skinCookie.write();
+                       }
+               }
+       }
+
+       if(isNull(user_skin)) return;
+
+       if( cur_skin != user_skin ) {
+               var url = buildOPACLink();
+               goTo(url.replace(cur_skin, user_skin));
+       }
+}
+
+function updateUserSetting(setting, value, user) {
+       if(user == null) user = G.user;
+       var a = {};
+       a[setting] = value;
+       var req = new Request( UPDATE_USER_PREFS, user.session, a );
+       req.send(true);
+       return req.result();
+}
+
+function grabSkinFromURL() {
+       var path = findBasePath();
+       path = path.replace("/xml/", "");
+       var skin = "";
+       for( var i = path.length - 1; i >= 0; i-- ) {
+               var ch = path.charAt(i);
+               if(ch == "/") break;
+               skin += ch;
+       }
+
+       var skin2 = "";
+       for( i = skin.length - 1; i >= 0; i--)
+               skin2 += skin.charAt(i);
+
+       return skin2;
+}
+
 
 /* returns a fleshed G.user on success, false on failure */
 function doLogin() {
@@ -326,6 +389,8 @@ function doLogin() {
        var u = grabUser(auth_result, true);
        if(u) updateLoc(u.home_ou(), findOrgDepth(u.home_ou()));
 
+       checkUserSkin();
+
        return u;
 }
 
@@ -344,7 +409,9 @@ function doLogout() {
        hideMe(G.ui.sidebar.logoutbox);
        unHideMe(G.ui.sidebar.loginbox);
        hideMe(G.ui.sidebar.logged_in_as);
+       skinCookie.remove(COOKIE_SKIN);
 
+       checkUserSkin("default");
 }
 
 
index dae282c..2f90176 100644 (file)
@@ -52,6 +52,7 @@ function initLogin() {
                swapCanvas(G.ui.login.box);
                G.ui.login.username.focus();
        }
+
        loginBoxVisible = !loginBoxVisible;
        G.ui.login.cancel.onclick = showCanvas;
 }