Fix bug with activity pane when user isn't an authenticated user.

Fix a grouping issue on users table with the "Local" user.
This commit is contained in:
Tim 2015-07-25 21:49:32 +02:00
parent 41d09066fe
commit 2a613c117f
3 changed files with 68 additions and 57 deletions

View file

@ -46,7 +46,7 @@ history_table_options = {
"data":"friendly_name", "data":"friendly_name",
"createdCell": function (td, cellData, rowData, row, col) { "createdCell": function (td, cellData, rowData, row, col) {
if (cellData !== '') { if (cellData !== '') {
if (rowData['user_id'] !== '') { if (rowData['user_id']) {
$(td).html('<a href="user?user_id=' + rowData['user_id'] + '">' + cellData + '</a>'); $(td).html('<a href="user?user_id=' + rowData['user_id'] + '">' + cellData + '</a>');
} else { } else {
$(td).html('<a href="user?user=' + rowData['user'] + '">' + cellData + '</a>'); $(td).html('<a href="user?user=' + rowData['user'] + '">' + cellData + '</a>');

View file

@ -37,16 +37,18 @@ class DataFactory(object):
'session_history.ip_address', 'session_history.ip_address',
'COUNT(session_history.id) as plays', 'COUNT(session_history.id) as plays',
'session_history.user', 'session_history.user',
'session_history.user_id' 'session_history.user_id',
'(case when typeof(session_history.user_id) = "integer" \
then session_history.user_id else -1 end) as grp_id',
] ]
try: try:
query = data_tables.ssp_query(table_name='session_history', query = data_tables.ssp_query(table_name='session_history',
columns=columns, columns=columns,
custom_where=[], custom_where=[],
group_by=['session_history.user_id'], group_by=['grp_id'],
join_types=['LEFT OUTER JOIN'], join_types=['LEFT OUTER JOIN'],
join_tables=['users'], join_tables=['users'],
join_evals=[['session_history.user_id', 'users.user_id']], join_evals=[['grp_id', 'users.user_id']],
kwargs=kwargs) kwargs=kwargs)
except: except:
logger.warn("Unable to execute database query.") logger.warn("Unable to execute database query.")
@ -309,60 +311,69 @@ class DataFactory(object):
return None return None
def get_user_details(self, user=None, user_id=None): def get_user_details(self, user=None, user_id=None):
try: monitor_db = database.MonitorDatabase()
monitor_db = database.MonitorDatabase()
if user: if user:
query = 'SELECT user_id, username, friendly_name, email, ' \ query = 'SELECT user_id, username, friendly_name, email, ' \
'thumb, is_home_user, is_allow_sync, is_restricted ' \ 'thumb, is_home_user, is_allow_sync, is_restricted ' \
'FROM users ' \ 'FROM users ' \
'WHERE username = ? ' \ 'WHERE username = ? ' \
'UNION ALL ' \ 'UNION ALL ' \
'SELECT null, user, null, null, null, null, null, null ' \ 'SELECT null, user, null, null, null, null, null, null ' \
'FROM session_history ' \ 'FROM session_history ' \
'WHERE user = ? ' \ 'WHERE user = ? ' \
'GROUP BY user ' \ 'GROUP BY user ' \
'LIMIT 1' 'LIMIT 1'
result = monitor_db.select(query, args=[user, user]) result = monitor_db.select(query, args=[user, user])
elif user_id: elif user_id:
query = 'SELECT user_id, username, friendly_name, email, ' \ query = 'SELECT user_id, username, friendly_name, email, ' \
'thumb, is_home_user, is_allow_sync, is_restricted ' \ 'thumb, is_home_user, is_allow_sync, is_restricted ' \
'FROM users ' \ 'FROM users ' \
'WHERE user_id = ? ' \ 'WHERE user_id = ? ' \
'UNION ALL ' \ 'UNION ALL ' \
'SELECT user_id, user, null, null, null, null, null, null ' \ 'SELECT user_id, user, null, null, null, null, null, null ' \
'FROM session_history ' \ 'FROM session_history ' \
'WHERE user_id = ? ' \ 'WHERE user_id = ? ' \
'GROUP BY user ' \ 'GROUP BY user ' \
'LIMIT 1' 'LIMIT 1'
result = monitor_db.select(query, args=[user_id, user_id]) result = monitor_db.select(query, args=[user_id, user_id])
if result: else:
for item in result: result = None
if not item['friendly_name']:
friendly_name = item['username']
else:
friendly_name = item['friendly_name']
if not item['thumb'] or item['thumb'] == '':
user_thumb = common.DEFAULT_USER_THUMB
else:
user_thumb = item['thumb']
user_details = {"user_id": item['user_id'], if result:
"username": item['username'], user_details = {}
"friendly_name": friendly_name, for item in result:
"email": item['email'], if not item['friendly_name']:
"thumb": user_thumb, friendly_name = item['username']
"is_home_user": item['is_home_user'], else:
"is_allow_sync": item['is_allow_sync'], friendly_name = item['friendly_name']
"is_restricted": item['is_restricted'] if not item['thumb'] or item['thumb'] == '':
} user_thumb = common.DEFAULT_USER_THUMB
return user_details else:
else: user_thumb = item['thumb']
return None
except:
return None
return None user_details = {"user_id": item['user_id'],
"username": item['username'],
"friendly_name": friendly_name,
"email": item['email'],
"thumb": user_thumb,
"is_home_user": item['is_home_user'],
"is_allow_sync": item['is_allow_sync'],
"is_restricted": item['is_restricted']
}
return user_details
else:
# If there is no user data we must return something
# Use "Local" user to retain compatibility with PlexWatch database value
return {"user_id": None,
"username": 'Local',
"friendly_name": 'Local',
"email": '',
"thumb": '',
"is_home_user": 0,
"is_allow_sync": 0,
"is_restricted": 0
}
def get_home_stats(self, time_range='30'): def get_home_stats(self, time_range='30'):
monitor_db = database.MonitorDatabase() monitor_db = database.MonitorDatabase()

View file

@ -547,7 +547,7 @@ class PmsConnect(object):
'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'), 'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'),
'thumb': helpers.get_xml_attr(session, 'thumb'), 'thumb': helpers.get_xml_attr(session, 'thumb'),
'bif_thumb': '', 'bif_thumb': '',
'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), 'user': user_details['username'],
'user_id': user_details['user_id'], 'user_id': user_details['user_id'],
'friendly_name': user_details['friendly_name'], 'friendly_name': user_details['friendly_name'],
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),
@ -656,7 +656,7 @@ class PmsConnect(object):
'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'), 'grandparent_thumb': helpers.get_xml_attr(session, 'grandparentThumb'),
'thumb': helpers.get_xml_attr(session, 'thumb'), 'thumb': helpers.get_xml_attr(session, 'thumb'),
'bif_thumb': bif_thumb, 'bif_thumb': bif_thumb,
'user': helpers.get_xml_attr(session.getElementsByTagName('User')[0], 'title'), 'user': user_details['username'],
'user_id': user_details['user_id'], 'user_id': user_details['user_id'],
'friendly_name': user_details['friendly_name'], 'friendly_name': user_details['friendly_name'],
'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'), 'player': helpers.get_xml_attr(session.getElementsByTagName('Player')[0], 'title'),