about summary refs log tree commit diff
diff options
context:
space:
mode:
authorzsloan2018-06-08 18:32:30 +0000
committerzsloan2018-06-08 18:32:30 +0000
commit59273293d3815066301a5fba0a096016a4d8ba44 (patch)
treec24b6617eb2db8776bdac3a10376e8e608bee51b
parent9bb60bb18ae5ac70fe480095554796b7c18f1b6c (diff)
downloadgenenetwork2-59273293d3815066301a5fba0a096016a4d8ba44.tar.gz
User collections (now stored in ElasticSearch) are reimplemented now and should have their full functionality back (adding/removing collections, adding/removing traits, etc)
-rw-r--r--wqflask/wqflask/collect.py109
-rw-r--r--wqflask/wqflask/templates/base.html6
-rw-r--r--wqflask/wqflask/templates/collections/list.html15
-rw-r--r--wqflask/wqflask/templates/show_trait_mapping_tools.html2
-rw-r--r--wqflask/wqflask/templates/show_trait_statistics.html6
-rw-r--r--wqflask/wqflask/user_manager.py319
6 files changed, 284 insertions, 173 deletions
diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py
index 2bd4b721..e1aceac8 100644
--- a/wqflask/wqflask/collect.py
+++ b/wqflask/wqflask/collect.py
@@ -88,7 +88,6 @@ class AnonCollection(object):
     def add_traits(self, params):
         #assert collection_name == "Default", "Unexpected collection name for anonymous user"
         self.traits = list(process_traits(params['traits']))
-        #len_before = len(Redis.smembers(self.key))
         existing_collections = Redis.get(self.key)
         logger.debug("existing_collections:", existing_collections)
         if existing_collections != None and existing_collections != "None":
@@ -138,54 +137,12 @@ class AnonCollection(object):
         collections_list[collection_position]['num_members'] = len(collections_list[collection_position]['members'])
         collections_list[collection_position]['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
         len_now = collections_list[collection_position]['num_members']
-        #print("before in redis:", json.loads(Redis.get(self.key)))
         Redis.set(self.key, json.dumps(collections_list))
-        #print("currently in redis:", json.loads(Redis.get(self.key)))
 
         # We need to return something so we'll return this...maybe in the future
         # we can use it to check the results
         return str(len_now)
 
-
-class UserCollection(object):
-    """User is logged in"""
-
-    def add_traits(self, params, collection_name):
-        logger.debug("---> params are:", params.keys())
-        logger.debug("     type(params):", type(params))
-        if collection_name=="Default":
-            uc = g.user_session.user_ob.get_collection_by_name("Default")
-            # Doesn't exist so we'll create it
-            if not uc:
-                return create_new("Default")
-        else:
-            uc = model.UserCollection.query.get(params['existing_collection'].split(":")[0])
-        members =  list(uc.members_as_set()) #set(json.loads(uc.members))
-        len_before = len(members)
-
-        traits = process_traits(params['traits'])
-
-        members_now = members
-        for trait in traits:
-            if trait in members:
-                continue
-            else:
-                members_now.append(trait)
-
-        #members_now = list(members | traits)
-        len_now = len(members_now)
-        uc.members = json.dumps(members_now)
-
-        uc.changed_timestamp = datetime.datetime.utcnow()
-
-        db_session.commit()
-
-        logger.debug("added to existing, now set is:" + str(uc.members))
-        report_change(len_before, len_now)
-
-        # Probably have to change that
-        return redirect(url_for('view_collection', uc_id=uc.id))
-
 def process_traits(unprocessed_traits):
     #print("unprocessed_traits are:", unprocessed_traits)
     if isinstance(unprocessed_traits, basestring):
@@ -216,9 +173,8 @@ def collections_add():
     traits=request.args['traits']
 
     if g.user_session.logged_in:
-        logger.debug("user_session",g.user_session)
-        user_collections = g.user_session.user_ob.user_collections
-        logger.debug("user_collections are:", user_collections)
+        user_collections = g.user_session.user_collections
+        #logger.debug("user_collections are:", user_collections)
         return render_template("collections/add.html",
                                traits = traits,
                                collections = user_collections,
@@ -262,14 +218,9 @@ def create_new(collection_name):
     traits = process_traits(unprocessed_traits)
 
     if g.user_session.logged_in:
-        uc = model.UserCollection()
-        uc.name = collection_name
-        logger.debug("user_session:", g.user_session.__dict__)
-        uc.user = g.user_session.user_id
-        uc.members = json.dumps(list(traits))
-        db_session.add(uc)
-        db_session.commit()
-        return redirect(url_for('view_collection', uc_id=uc.id))
+        uc_id = g.user_session.add_collection(collection_name, traits)
+
+        return redirect(url_for('view_collection', uc_id=uc_id))
     else:
         ac = AnonCollection(collection_name)
         ac.changed_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
@@ -279,17 +230,17 @@ def create_new(collection_name):
 @app.route("/collections/list")
 def list_collections():
     params = request.args
-    logger.debug("PARAMS:", params)
+    #logger.debug("PARAMS:", params)
     if g.user_session.logged_in:
-        user_collections = list(g.user_session.user_ob.user_collections)
-        logger.debug("user_collections are:", user_collections)
+        user_collections = list(g.user_session.user_collections)
+        #logger.debug("user_collections are:", user_collections)
         return render_template("collections/list.html",
                                params = params,
                                collections = user_collections,
                                )
     else:
         anon_collections = user_manager.AnonUser().get_collections()
-        logger.debug("anon_collections are:", anon_collections)
+        #logger.debug("anon_collections are:", anon_collections)
         return render_template("collections/list.html",
                                params = params,
                                collections = anon_collections)
@@ -298,20 +249,14 @@ def list_collections():
 @app.route("/collections/remove", methods=('POST',))
 def remove_traits():
     params = request.form
-    logger.debug("params are:", params)
 
     if "uc_id" in params:
         uc_id = params['uc_id']
-        uc = model.UserCollection.query.get(uc_id)
         traits_to_remove = params.getlist('traits[]')
         traits_to_remove = process_traits(traits_to_remove)
         logger.debug("\n\n  after processing, traits_to_remove:", traits_to_remove)
-        all_traits = uc.members_as_set()
-        members_now = all_traits - traits_to_remove
-        logger.debug("  members_now:", members_now)
-        uc.members = json.dumps(list(members_now))
-        uc.changed_timestamp = datetime.datetime.utcnow()
-        db_session.commit()
+
+        members_now = g.user_session.remove_traits_from_collection(uc_id, traits_to_remove)
     else:
         collection_name = params['collection_name']
         members_now = AnonCollection(collection_name).remove_traits(params)
@@ -325,22 +270,13 @@ def remove_traits():
 @app.route("/collections/delete", methods=('POST',))
 def delete_collection():
     params = request.form
-    logger.debug("params:", params)
     if g.user_session.logged_in:
         uc_id = params['uc_id']
         if len(uc_id.split(":")) > 1:
             for this_uc_id in uc_id.split(":"):
-                uc = model.UserCollection.query.get(this_uc_id)
-                collection_name = uc.name
-                db_session.delete(uc)
-                db_session.commit()
+                collection_name = g.user_session.delete_collection(this_uc_id)
         else:
-            uc = model.UserCollection.query.get(uc_id)
-            # Todo: For now having the id is good enough since it's so unique
-            # But might want to check ownership in the future
-            collection_name = uc.name
-            db_session.delete(uc)
-            db_session.commit()
+            collection_name = g.user_session.delete_collection(uc_id)
     else:
         if "collection_name" in params:
             collection_name = params['collection_name']
@@ -348,7 +284,10 @@ def delete_collection():
             for this_collection in params['uc_id'].split(":"):
                 user_manager.AnonUser().delete_collection(this_collection)
 
-    flash("We've deleted the collection: {}.".format(collection_name), "alert-info")
+    if len(uc_id.split(":")) > 1:
+        flash("We've deleted the selected collections.", "alert-info")
+    else:
+        flash("We've deleted the collection: {}.".format(collection_name), "alert-info")
 
     return redirect(url_for('list_collections'))
 
@@ -356,12 +295,11 @@ def delete_collection():
 @app.route("/collections/view")
 def view_collection():
     params = request.args
-    logger.debug("PARAMS in view collection:", params)
 
-    if "uc_id" in params:
+    if g.user_session.logged_in and "uc_id" in params:
         uc_id = params['uc_id']
-        uc = model.UserCollection.query.get(uc_id)
-        traits = json.loads(uc.members)
+        uc = (collection for collection in g.user_session.user_collections if collection["id"] == uc_id).next()
+        traits = uc["members"]
     else:
         user_collections = json.loads(Redis.get(user_manager.AnonUser().key))
         this_collection = {}
@@ -369,10 +307,8 @@ def view_collection():
             if collection['id'] == params['collection_id']:
                 this_collection = collection
                 break
-        #this_collection = user_collections[params['collection_id']]
-        traits = this_collection['members']
 
-    logger.debug("in view_collection traits are:", traits)
+        traits = this_collection['members']
 
     trait_obs = []
     json_version = []
@@ -398,9 +334,8 @@ def view_collection():
         collection_info = dict(trait_obs=trait_obs,
                                collection_name=this_collection['name'])
     if "json" in params:
-        logger.debug("json_version:", json_version)
         return json.dumps(json_version)
     else:
         return render_template("collections/view.html",
                            **collection_info
-                           )
+                           )
\ No newline at end of file
diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html
index e8b51523..3df4c81a 100644
--- a/wqflask/wqflask/templates/base.html
+++ b/wqflask/wqflask/templates/base.html
@@ -44,8 +44,8 @@
                         </li>
                         <li class="">
                             <a href="/collections/list">Collections
-                                {% if g.user_session.user_ob %}
-                                <span class="badge badge-info">{{ g.user_session.user_ob.display_num_collections() }}</span>
+                                {% if g.user_session.logged_in %}
+                                <span class="badge badge-info">{{ g.user_session.num_collections }}</span>
                                 {% else %}
                                 <span class="badge badge-info">{{ g.cookie_session.display_num_collections() }}</span>
                                 {% endif %}
@@ -71,7 +71,7 @@
                         </li>
                         <li class="">
                             {% if g.user_session.logged_in %}
-                            <a id="login_out" title="Signed in as {{ g.user_session.user_ob.name_and_org }}." href="/n/logout">Sign out</a>
+                            <a id="login_out" title="Signed in as {{ g.user_session.user_name }}" href="/n/logout">Sign out</a>
                             {% else %}
                             <a id="login_in" href="/n/login">Sign in</a>
                             {% endif %}
diff --git a/wqflask/wqflask/templates/collections/list.html b/wqflask/wqflask/templates/collections/list.html
index e7f3229b..11c33673 100644
--- a/wqflask/wqflask/templates/collections/list.html
+++ b/wqflask/wqflask/templates/collections/list.html
@@ -8,7 +8,7 @@
 {% endblock %}
 {% block content %}
 <!-- Start of body -->
-    {% if g.user_session.user_ob %}
+    {% if g.user_session.logged_in %}
     {{ header("Your Collections",
         'You have {}.'.format(numify(collections|count, "collection", "collections"))) }}
     {% else %}
@@ -19,8 +19,8 @@
 
     <div class="container">
         <div class="page-header">
-            {% if g.user_session.user_ob %}
-            <h1>Collections owned by {{ g.user_session.user_ob.full_name }}</h1>
+            {% if g.user_session.logged_in %}
+            <h1>Collections owned by {{ g.user_session.user_name }}</h1>
             {% else %}
             <h1>Your Collections</h1>
             {% endif %}
@@ -51,19 +51,24 @@
             <tbody>
             {% for uc in collections %}
                 <tr class="collection_line">
-                    {% if g.user_session.user_ob %}
+                    {% if g.user_session.logged_in %}
                     <td style="padding-left: 8px; padding-right: 0px; padding-top: 4px; align: center;"><INPUT TYPE="checkbox" NAME="collection" class="checkbox trait_checkbox" VALUE="{{ uc.id }}"></td>
                     {% else %}
                     <td style="padding-left: 8px; padding-right: 0px; padding-top: 4px; align: center;"><INPUT TYPE="checkbox" NAME="collection" class="checkbox trait_checkbox" VALUE="{{ uc.name }}"></td>
                     {% endif %}
                     <td align="right">{{ loop.index }}
-                    {% if g.user_session.user_ob %}
+                    {% if g.user_session.logged_in %}
                     <td><a class="collection_name" href="{{ url_for('view_collection', uc_id=uc.id) }}">{{ uc.name }}</a></td>
                     {% else %}
                     <td><a class="collection_name" href="{{ url_for('view_collection', collection_id=uc.id) }}">{{ uc.name }}</a></td>
                     {% endif %}
+                    {% if g.user_session.logged_in %}
+                    <td>{{ uc.created_timestamp }}</td>
+                    <td>{{ uc.changed_timestamp }}</td>
+                    {% else %}
                     <td>{{ timeago(uc.created_timestamp.isoformat() + "Z") }}</td>
                     <td>{{ timeago(uc.changed_timestamp.isoformat() + "Z") }}</td>
+                    {% endif %}
                     <td align="right">{{ uc.num_members }}</td>
                 </tr>
             {% endfor %}
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index 3d31797a..9c19028c 100644
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -71,7 +71,7 @@
                         <div class="mapping_method_fields form-group">
                             <label style="text-align: right;" class="col-xs-3 control-label">Covariates</label>
                             <div style="margin-left:20px;" class="col-xs-7">
-                              {% if g.user_session.user_ob and (g.user_session.user_ob.display_num_collections() == "") %}
+                              {% if g.user_session.logged_in and (g.user_session.num_collections > 0) %}
                               No collections available. Please add traits to a collection to use them as covariates.
                               {% elif g.cookie_session.display_num_collections() == "" %}
                               No collections available. Please add traits to a collection to use them as covariates.
diff --git a/wqflask/wqflask/templates/show_trait_statistics.html b/wqflask/wqflask/templates/show_trait_statistics.html
index 09df3245..988c8047 100644
--- a/wqflask/wqflask/templates/show_trait_statistics.html
+++ b/wqflask/wqflask/templates/show_trait_statistics.html
@@ -13,7 +13,7 @@
                 <li>
                     <a href="#probability_plot" data-toggle="tab">Probability Plot</a>
                 </li>
-                {% if g.user_session.user_ob %}
+                {% if g.user_session.logged_in %}
                 <li>
                     <a href="#scatterplot_matrix" data-toggle="tab">Scatterplot Matrix</a>
                 </li>
@@ -72,7 +72,7 @@
                             <i class="icon-signal"></i> Sort By Value
                             </button>
                         </div>
-                        {% if g.user_session.user_ob %}
+                        {% if g.user_session.logged_in %}
                         <div class="btn-group">
                             <button type="button" class="btn btn-default" id="color_by_trait">
                                 <i class="icon-tint"></i> Color by Trait
@@ -126,7 +126,7 @@
                         <div id="box_plot"></div>
                     </div>
                 </div>
-                {% if g.user_session.user_ob %}
+                {% if g.user_session.logged_in %}
                 <div class="tab-pane" id="scatterplot_matrix">
                     
                     <div style="margin-bottom:40px;" class="btn-group">
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index 132bae90..3772414c 100644
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -54,11 +54,11 @@ class AnonUser(object):
     def __init__(self):
         self.cookie = request.cookies.get(self.cookie_name)
         if self.cookie:
-            logger.debug("already is cookie")
+            logger.debug("ANON COOKIE ALREADY EXISTS")
             self.anon_id = verify_cookie(self.cookie)
 
         else:
-            logger.debug("creating new cookie")
+            logger.debug("CREATING NEW ANON COOKIE")
             self.anon_id, self.cookie = create_signed_cookie()
         self.key = "anon_collection:v1:{}".format(self.anon_id)
 
@@ -117,16 +117,11 @@ class AnonUser(object):
         result = Redis.get(self.key)
         collections_list = json.loads(result if result else "[]")
         for collection in collections_list:
-            uc = model.UserCollection()
-            uc.name = collection['name']
-            collection_exists = g.user_session.user_ob.get_collection_by_name(uc.name)
+            collection_exists = g.user_session.get_collection_by_name(collection['name'])
             if collection_exists:
                 continue
             else:
-                uc.user = g.user_session.user_id
-                uc.members = json.dumps(collection['members'])
-                db_session.add(uc)
-                db_session.commit()
+                g.user_session.add_collection(collection['name'], collection['members'])
 
     def display_num_collections(self):
         """
@@ -164,11 +159,12 @@ def create_signed_cookie():
 class UserSession(object):
     """Logged in user handling"""
 
-    cookie_name = 'session_id_v2'
+    cookie_name = 'session_id_v1'
 
     def __init__(self):
         cookie = request.cookies.get(self.cookie_name)
         if not cookie:
+            logger.debug("NO USER COOKIE")
             self.logged_in = False
             return
         else:
@@ -179,7 +175,6 @@ class UserSession(object):
             self.session_id = session_id
             self.record = Redis.hgetall(self.redis_key)
 
-
             if not self.record:
                 # This will occur, for example, when the browser has been left open over a long
                 # weekend and the site hasn't been visited by the user
@@ -211,21 +206,190 @@ class UserSession(object):
             return ''
 
     @property
-    def user_ob(self):
-        """Actual sqlalchemy record"""
-        # Only look it up once if needed, then store it
-        # raise "OBSOLETE: use ElasticSearch instead"
-        try:
-            if LOG_SQL_ALCHEMY:
-                logging.getLogger('sqlalchemy.pool').setLevel(logging.DEBUG)
+    def es_user_id(self):
+        """User id from ElasticSearch (need to check if this is the same as the id stored in self.records)"""
+
+        es = get_elasticsearch_connection()
+        user_email = self.record['user_email_address']
+
+        #ZS: Get user's collections if they exist
+        response = es.search(
+                       index = "users", doc_type = "local", body = {
+                       "query": { "match": { "email_address": user_email } }
+                   })
 
-            # Already did this before
-            return self.db_object
-        except AttributeError:
-            # Doesn't exist so we'll create it
-            self.db_object = model.User.query.get(self.user_id)
-            return self.db_object
+        user_id = response['hits']['hits'][0]['_id']
+        return user_id
+
+    @property
+    def user_name(self):
+        """Shortcut to the user_name"""
+        if 'user_name' in self.record:
+            return self.record['user_name']
+        else:
+            return ''
+
+    @property
+    def user_collections(self):
+        """List of user's collections"""
+
+        es = get_elasticsearch_connection()
+
+        user_email = self.record['user_email_address']
+
+        #ZS: Get user's collections if they exist
+        response = es.search(
+                       index = "users", doc_type = "local", body = {
+                       "query": { "match": { "email_address": user_email } }
+                   })
+        user_info = response['hits']['hits'][0]['_source']
+        if 'collections' in user_info.keys():
+            if len(user_info['collections']) > 0:
+                return json.loads(user_info['collections'])
+            else:
+                return []
+        else:
+            return []
+
+    @property
+    def num_collections(self):
+        """Number of user's collections"""
+
+        es = get_elasticsearch_connection()
+
+        user_email = self.record['user_email_address']
+
+        #ZS: Get user's collections if they exist
+        response = es.search(
+                       index = "users", doc_type = "local", body = {
+                       "query": { "match": { "email_address": user_email } }
+                   })
+
+        user_info = response['hits']['hits'][0]['_source']
+        logger.debug("USER NUM COLL:", user_info)
+        if 'collections' in user_info.keys():
+            if user_info['collections'] != "[]" and len(user_info['collections']) > 0:
+                collections_json = json.loads(user_info['collections'])
+                return len(collections_json)
+            else:
+                return 0
+        else:
+            return 0
+
+###
+# ZS: This is currently not used, but I'm leaving it here commented out because the old "set superuser" code (at the bottom of this file) used it
+###
+#    @property
+#    def user_ob(self):
+#        """Actual sqlalchemy record"""
+#        # Only look it up once if needed, then store it
+#        # raise "OBSOLETE: use ElasticSearch instead"
+#        try:
+#            if LOG_SQL_ALCHEMY:
+#                logging.getLogger('sqlalchemy.pool').setLevel(logging.DEBUG)
+#
+#            # Already did this before
+#            return self.db_object
+#        except AttributeError:
+#            # Doesn't exist so we'll create it
+#            self.db_object = model.User.query.get(self.user_id)
+#            return self.db_object
+
+    def add_collection(self, collection_name, traits):
+        """Add collection into ElasticSearch"""
+
+        collection_dict = {'id': unicode(uuid.uuid4()),
+                           'name': collection_name,
+                           'created_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
+                           'changed_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
+                           'num_members': len(traits),
+                           'members': list(traits) }
+
+        es = get_elasticsearch_connection()
+
+        user_email = self.record['user_email_address']
+        response = es.search(
+                       index = "users", doc_type = "local", body = {
+                       "query": { "match": { "email_address": user_email } }
+                   })
+
+        user_id = response['hits']['hits'][0]['_id']
+        user_info = response['hits']['hits'][0]['_source']
+
+        if 'collections' in user_info.keys():
+            if user_info['collections'] != [] and user_info['collections'] != "[]":
+                current_collections = json.loads(user_info['collections'])
+                current_collections.append(collection_dict)
+                collections_json = json.dumps(current_collections)
+            else:
+                collections_json = json.dumps([collection_dict])
+        else:
+            collections_json = json.dumps([collection_dict])
 
+        collection_body = {'doc': {'collections': collections_json}}
+        es.update(index='users', doc_type='local', id=user_id, refresh='wait_for', body=collection_body)
+
+        return collection_dict['id']
+
+    def delete_collection(self, collection_id):
+        """Remove collection with given ID"""
+
+        updated_collections = []
+        for collection in self.user_collections:
+            if collection['id'] == collection_id:
+                continue
+            else:
+                updated_collections.append(collection)
+
+        es = get_elasticsearch_connection()
+
+        collection_body = {'doc': {'collections': json.dumps(updated_collections)}}
+        es.update(index='users', doc_type='local', id=self.es_user_id, refresh='wait_for', body=collection_body)
+
+        return collection['name']
+
+    def remove_traits_from_collection(self, collection_id, traits_to_remove):
+        """Remove specified traits from a collection"""
+
+        this_collection = self.get_collection_by_id(collection_id)
+
+        updated_collection = this_collection
+        updated_traits = []
+        for trait in this_collection['members']:
+            if trait in traits_to_remove:
+                continue
+            else:
+                updated_traits.append(trait)
+
+        updated_collection['members'] = updated_traits
+        updated_collection['num_members'] = len(updated_traits)
+        updated_collection['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+
+        updated_collections = []
+        for collection in self.user_collections:
+            if collection['id'] == collection_id:
+                updated_collections.append(updated_collection)
+            else:
+                updated_collections.append(collection)
+
+        es = get_elasticsearch_connection()
+
+        collection_body = {'doc': {'collections': json.dumps(updated_collections)}}
+        es.update(index='users', doc_type='local', id=self.es_user_id, refresh='wait_for', body=collection_body)
+
+        return updated_traits
+
+    def get_collection_by_id(self, collection_id):
+        for collection in self.user_collections:
+            if collection['id'] == collection_id:
+                return collection
+
+    def get_collection_by_name(self, collection_name):
+        for collection in self.user_collections:
+            if collection['name'] == collection_name:
+                return collection
+
+        return None
 
     def delete_session(self):
         # And more importantly delete the redis record
@@ -602,6 +766,7 @@ class LoginUser(object):
 
     def __init__(self):
         self.remember_me = False
+        self.logged_in = False
 
     def oauth2_login(self, login_type, user_id):
         """Login via an OAuth2 provider"""
@@ -672,6 +837,8 @@ class LoginUser(object):
 
             #g.cookie_session.import_traits_to_user()
 
+            self.logged_in = True
+
             return self.actual_login(user, import_collections=import_col)
 
         else:
@@ -691,6 +858,7 @@ class LoginUser(object):
             max_age = self.remember_time
         else:
             max_age = None
+
         response.set_cookie(UserSession.cookie_name, session_id_signed, max_age=max_age)
         return response
 
@@ -706,6 +874,7 @@ class LoginUser(object):
 
         session = dict(login_time = time.time(),
                        user_id = user.id,
+                       user_name = user.full_name,
                        user_email_address = user.email_address)
 
         key = UserSession.cookie_name + ":" + login_rec.session_id
@@ -716,6 +885,7 @@ class LoginUser(object):
         else:
             expire_time = THREE_DAYS
         Redis.expire(key, expire_time)
+
         return session_id_signed
 
     def unsuccessful_login(self, user):
@@ -767,56 +937,57 @@ def forgot_password_submit():
 def unauthorized(error):
     return redirect(url_for('login'))
 
-def super_only():
-    try:
-        superuser = g.user_session.user_ob.superuser
-    except AttributeError:
-        superuser = False
-    if not superuser:
-        flash("You must be a superuser to access that page.", "alert-error")
-        abort(401)
-
-
-
-@app.route("/manage/users")
-def manage_users():
-    super_only()
-    template_vars = UsersManager()
-    return render_template("admin/user_manager.html", **template_vars.__dict__)
-
-@app.route("/manage/user")
-def manage_user():
-    super_only()
-    template_vars = UserManager(request.args)
-    return render_template("admin/ind_user_manager.html", **template_vars.__dict__)
-
-@app.route("/manage/groups")
-def manage_groups():
-    super_only()
-    template_vars = GroupsManager(request.args)
-    return render_template("admin/group_manager.html", **template_vars.__dict__)
-
-@app.route("/manage/make_superuser")
-def make_superuser():
-    super_only()
-    params = request.args
-    user_id = params['user_id']
-    user = model.User.query.get(user_id)
-    superuser_info = basic_info()
-    superuser_info['crowned_by'] = g.user_session.user_id
-    user.superuser = json.dumps(superuser_info, sort_keys=True)
-    db_session.commit()
-    flash("We've made {} a superuser!".format(user.name_and_org))
-    return redirect(url_for("manage_users"))
-
-@app.route("/manage/assume_identity")
-def assume_identity():
-    super_only()
-    params = request.args
-    user_id = params['user_id']
-    user = model.User.query.get(user_id)
-    assumed_by = g.user_session.user_id
-    return LoginUser().actual_login(user, assumed_by=assumed_by)
+###
+# ZS: The following 6 functions require the old MySQL User accounts; I'm leaving them commented out just in case we decide to reimplement them using ElasticSearch
+###
+#def super_only():
+#    try:
+#        superuser = g.user_session.user_ob.superuser
+#    except AttributeError:
+#        superuser = False
+#    if not superuser:
+#        flash("You must be a superuser to access that page.", "alert-error")
+#        abort(401)
+
+#@app.route("/manage/users")
+#def manage_users():
+#    super_only()
+#    template_vars = UsersManager()
+#    return render_template("admin/user_manager.html", **template_vars.__dict__)
+
+#@app.route("/manage/user")
+#def manage_user():
+#    super_only()
+#    template_vars = UserManager(request.args)
+#    return render_template("admin/ind_user_manager.html", **template_vars.__dict__)
+
+#@app.route("/manage/groups")
+#def manage_groups():
+#    super_only()
+#    template_vars = GroupsManager(request.args)
+#    return render_template("admin/group_manager.html", **template_vars.__dict__)
+
+#@app.route("/manage/make_superuser")
+#def make_superuser():
+#    super_only()
+#    params = request.args
+#    user_id = params['user_id']
+#    user = model.User.query.get(user_id)
+#    superuser_info = basic_info()
+#    superuser_info['crowned_by'] = g.user_session.user_id
+#    user.superuser = json.dumps(superuser_info, sort_keys=True)
+#    db_session.commit()
+#    flash("We've made {} a superuser!".format(user.name_and_org))
+#    return redirect(url_for("manage_users"))
+
+#@app.route("/manage/assume_identity")
+#def assume_identity():
+#    super_only()
+#    params = request.args
+#    user_id = params['user_id']
+#    user = model.User.query.get(user_id)
+#    assumed_by = g.user_session.user_id
+#    return LoginUser().actual_login(user, assumed_by=assumed_by)
 
 
 @app.route("/n/register", methods=('GET', 'POST'))