mirror of
https://github.com/zulip/zulip.git
synced 2025-11-09 16:37:23 +00:00
Add UserProfile flag to control whether we have a left side userlist.
Previously this was hardcoded for a single customer. (imported from commit a6b7095050aa10cef976541505d9b09a35453f48)
This commit is contained in:
@@ -18,8 +18,6 @@ exports.local_echo = true;
|
|||||||
exports.disable_message_editing = _.contains(['mit.edu'], page_params.domain);
|
exports.disable_message_editing = _.contains(['mit.edu'], page_params.domain);
|
||||||
exports.is_og_zulip_user = _.contains(og_zuliper_emails, page_params.email);
|
exports.is_og_zulip_user = _.contains(og_zuliper_emails, page_params.email);
|
||||||
|
|
||||||
exports.left_side_userlist = _.contains(['customer7.invalid'], page_params.domain);
|
|
||||||
|
|
||||||
// Experimental modification to support much wider message views.
|
// Experimental modification to support much wider message views.
|
||||||
exports.full_width = false;
|
exports.full_width = false;
|
||||||
|
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ exports.resize_page_components = function () {
|
|||||||
var h;
|
var h;
|
||||||
var sidebar;
|
var sidebar;
|
||||||
|
|
||||||
if (feature_flags.left_side_userlist) {
|
if (page_params.left_side_userlist) {
|
||||||
var css_narrow_mode = viewport.is_narrow();
|
var css_narrow_mode = viewport.is_narrow();
|
||||||
|
|
||||||
$("#top_navbar").removeClass("rightside-userlist");
|
$("#top_navbar").removeClass("rightside-userlist");
|
||||||
|
|||||||
@@ -185,6 +185,11 @@ function get_events_success(events) {
|
|||||||
page_params.twenty_four_hour_time = event.twenty_four_hour_time;
|
page_params.twenty_four_hour_time = event.twenty_four_hour_time;
|
||||||
// TODO: Make this rerender the existing elements to not require a reload.
|
// TODO: Make this rerender the existing elements to not require a reload.
|
||||||
}
|
}
|
||||||
|
if (event.setting_name === 'left_side_userlist') {
|
||||||
|
// TODO: Make this change the view immediately rather
|
||||||
|
// than requiring a reload or page resize.
|
||||||
|
page_params.left_side_userlist = event.left_side_userlist;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -362,6 +362,24 @@ exports.setup_page = function () {
|
|||||||
update_audible_notification_setting);
|
update_audible_notification_setting);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("#left_side_userlist").change(function () {
|
||||||
|
var left_side_userlist = this.checked;
|
||||||
|
var data = {};
|
||||||
|
data.left_side_userlist = JSON.stringify(left_side_userlist);
|
||||||
|
|
||||||
|
channel.patch({
|
||||||
|
url: '/json/left_side_userlist',
|
||||||
|
data: data,
|
||||||
|
success: function (resp, statusText, xhr, form) {
|
||||||
|
ui.report_success("Updated display settings! You will need to reload the window for your changes to take effect.",
|
||||||
|
$('#display-settings-status').expectOne());
|
||||||
|
},
|
||||||
|
error: function (xhr, error_type, xhn) {
|
||||||
|
ui.report_error("Error updating display settings", xhr, $('#display-settings-status').expectOne());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
$("#twenty_four_hour_time").change(function () {
|
$("#twenty_four_hour_time").change(function () {
|
||||||
var data = {};
|
var data = {};
|
||||||
var setting_value = $("#twenty_four_hour_time").is(":checked");
|
var setting_value = $("#twenty_four_hour_time").is(":checked");
|
||||||
|
|||||||
@@ -363,7 +363,7 @@ $(function () {
|
|||||||
// box, but, close enough for now.
|
// box, but, close enough for now.
|
||||||
resize.handler();
|
resize.handler();
|
||||||
|
|
||||||
if (!feature_flags.left_side_userlist) {
|
if (!page_params.left_side_userlist) {
|
||||||
$("#navbar-buttons").addClass("right-userlist");
|
$("#navbar-buttons").addClass("right-userlist");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -92,13 +92,23 @@
|
|||||||
Display Settings</div>
|
Display Settings</div>
|
||||||
<div class="alert" id="display-settings-status"></div>
|
<div class="alert" id="display-settings-status"></div>
|
||||||
<div class="display-settings-form">
|
<div class="display-settings-form">
|
||||||
|
|
||||||
<div class="control-group">
|
<div class="control-group">
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<input type="checkbox" name="twenty_four_hour_time"
|
<input type="checkbox" name="left_side_userlist" id="left_side_userlist"
|
||||||
id="twenty_four_hour_time"
|
{{#if page_params.left_side_userlist}}
|
||||||
{{#if page_params.twenty_four_hour_time}}
|
checked="yes"
|
||||||
checked="yes"
|
{{/if}} />
|
||||||
{{/if}} />
|
</div>
|
||||||
|
<label for="left_side_userlist" class="control-label">Display user list on left side in narrow windows.</label>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="control-group">
|
||||||
|
<div class="controls">
|
||||||
|
<input type="checkbox" name="twenty_four_hour_time" id="twenty_four_hour_time"
|
||||||
|
{{#if page_params.twenty_four_hour_time}}
|
||||||
|
checked="yes"
|
||||||
|
{{/if}} />
|
||||||
</div>
|
</div>
|
||||||
<label for="twenty_four_hour_time" class="control-label">
|
<label for="twenty_four_hour_time" class="control-label">
|
||||||
Display time in 24-hour format (17:00 instead of 5:00 PM)
|
Display time in 24-hour format (17:00 instead of 5:00 PM)
|
||||||
|
|||||||
@@ -1729,6 +1729,17 @@ def do_change_twenty_four_hour_time(user_profile, setting_value, log=True):
|
|||||||
log_event(event)
|
log_event(event)
|
||||||
send_event(event, [user_profile.id])
|
send_event(event, [user_profile.id])
|
||||||
|
|
||||||
|
def do_change_left_side_userlist(user_profile, setting_value, log=True):
|
||||||
|
user_profile.left_side_userlist = setting_value
|
||||||
|
user_profile.save(update_fields=["left_side_userlist"])
|
||||||
|
event = {'type': 'update_display_settings',
|
||||||
|
'user': user_profile.email,
|
||||||
|
'setting_name':'left_side_userlist',
|
||||||
|
'setting': setting_value}
|
||||||
|
if log:
|
||||||
|
log_event(event)
|
||||||
|
send_event(event, [user_profile.id])
|
||||||
|
|
||||||
def set_default_streams(realm, stream_names):
|
def set_default_streams(realm, stream_names):
|
||||||
DefaultStream.objects.filter(realm=realm).delete()
|
DefaultStream.objects.filter(realm=realm).delete()
|
||||||
for stream_name in stream_names:
|
for stream_name in stream_names:
|
||||||
@@ -2373,6 +2384,7 @@ def fetch_initial_state_data(user_profile, event_types, queue_id):
|
|||||||
|
|
||||||
if want('update_display_settings'):
|
if want('update_display_settings'):
|
||||||
state['twenty_four_hour_time'] = user_profile.twenty_four_hour_time
|
state['twenty_four_hour_time'] = user_profile.twenty_four_hour_time
|
||||||
|
state['left_side_userlist'] = user_profile.left_side_userlist
|
||||||
|
|
||||||
return state
|
return state
|
||||||
|
|
||||||
@@ -2507,6 +2519,8 @@ def apply_events(state, events, user_profile):
|
|||||||
elif event['type'] == "update_display_settings":
|
elif event['type'] == "update_display_settings":
|
||||||
if event['setting_name'] == "twenty_four_hour_time":
|
if event['setting_name'] == "twenty_four_hour_time":
|
||||||
state['twenty_four_hour_time'] = event["setting"]
|
state['twenty_four_hour_time'] = event["setting"]
|
||||||
|
if event['setting_name'] == 'left_side_userlist':
|
||||||
|
state['left_side_userlist'] = event["setting"]
|
||||||
else:
|
else:
|
||||||
raise ValueError("Unexpected event type %s" % (event['type'],))
|
raise ValueError("Unexpected event type %s" % (event['type'],))
|
||||||
|
|
||||||
|
|||||||
19
zerver/migrations/0004_userprofile_left_side_userlist.py
Normal file
19
zerver/migrations/0004_userprofile_left_side_userlist.py
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('zerver', '0003_custom_indexes'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='userprofile',
|
||||||
|
name='left_side_userlist',
|
||||||
|
field=models.BooleanField(default=False),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -327,6 +327,7 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
|
|||||||
# UI vars
|
# UI vars
|
||||||
enter_sends = models.NullBooleanField(default=True)
|
enter_sends = models.NullBooleanField(default=True)
|
||||||
autoscroll_forever = models.BooleanField(default=False)
|
autoscroll_forever = models.BooleanField(default=False)
|
||||||
|
left_side_userlist = models.BooleanField(default=False)
|
||||||
|
|
||||||
# display settings
|
# display settings
|
||||||
twenty_four_hour_time = models.BooleanField(default=False)
|
twenty_four_hour_time = models.BooleanField(default=False)
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ from zerver.lib.actions import (
|
|||||||
do_update_message,
|
do_update_message,
|
||||||
do_update_pointer,
|
do_update_pointer,
|
||||||
do_change_twenty_four_hour_time,
|
do_change_twenty_four_hour_time,
|
||||||
|
do_change_left_side_userlist,
|
||||||
fetch_initial_state_data,
|
fetch_initial_state_data,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -448,6 +449,19 @@ class EventsRegisterTest(AuthedTestCase):
|
|||||||
error = schema_checker('events[0]', events[0])
|
error = schema_checker('events[0]', events[0])
|
||||||
self.assert_on_error(error)
|
self.assert_on_error(error)
|
||||||
|
|
||||||
|
def test_change_left_side_userlist(self):
|
||||||
|
schema_checker = check_dict([
|
||||||
|
('type', equals('update_display_settings')),
|
||||||
|
('setting_name', equals('left_side_userlist')),
|
||||||
|
('user', check_string),
|
||||||
|
('setting', check_bool),
|
||||||
|
])
|
||||||
|
# The first False is probably a noop, then we get transitions in both directions.
|
||||||
|
for setting_value in [False, True, False]:
|
||||||
|
events = self.do_test(lambda: do_change_left_side_userlist(self.user_profile, setting_value))
|
||||||
|
error = schema_checker('events[0]', events[0])
|
||||||
|
self.assert_on_error(error)
|
||||||
|
|
||||||
def test_realm_emoji_events(self):
|
def test_realm_emoji_events(self):
|
||||||
schema_checker = check_dict([
|
schema_checker = check_dict([
|
||||||
('type', equals('realm_emoji')),
|
('type', equals('realm_emoji')),
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ from zerver.lib.actions import bulk_remove_subscriptions, do_change_password, \
|
|||||||
do_change_enable_stream_desktop_notifications, do_change_enable_stream_sounds, \
|
do_change_enable_stream_desktop_notifications, do_change_enable_stream_sounds, \
|
||||||
do_change_stream_description, do_get_streams, do_make_stream_private, \
|
do_change_stream_description, do_get_streams, do_make_stream_private, \
|
||||||
do_regenerate_api_key, do_remove_default_stream, do_update_pointer, \
|
do_regenerate_api_key, do_remove_default_stream, do_update_pointer, \
|
||||||
do_change_avatar_source, do_change_twenty_four_hour_time
|
do_change_avatar_source, do_change_twenty_four_hour_time, do_change_left_side_userlist
|
||||||
|
|
||||||
from zerver.lib.create_user import random_api_key
|
from zerver.lib.create_user import random_api_key
|
||||||
from zerver.lib.push_notifications import num_push_devices_for_user
|
from zerver.lib.push_notifications import num_push_devices_for_user
|
||||||
@@ -983,6 +983,7 @@ def home(request):
|
|||||||
realm_invite_by_admins_only = register_ret['realm_invite_by_admins_only'],
|
realm_invite_by_admins_only = register_ret['realm_invite_by_admins_only'],
|
||||||
realm_restricted_to_domain = register_ret['realm_restricted_to_domain'],
|
realm_restricted_to_domain = register_ret['realm_restricted_to_domain'],
|
||||||
enter_sends = user_profile.enter_sends,
|
enter_sends = user_profile.enter_sends,
|
||||||
|
left_side_userlist = register_ret['left_side_userlist'],
|
||||||
referrals = register_ret['referrals'],
|
referrals = register_ret['referrals'],
|
||||||
realm_emoji = register_ret['realm_emoji'],
|
realm_emoji = register_ret['realm_emoji'],
|
||||||
needs_tutorial = needs_tutorial,
|
needs_tutorial = needs_tutorial,
|
||||||
@@ -1642,6 +1643,18 @@ def json_time_setting(request, user_profile, twenty_four_hour_time=REQ(validator
|
|||||||
|
|
||||||
return json_success(result)
|
return json_success(result)
|
||||||
|
|
||||||
|
@authenticated_json_post_view
|
||||||
|
@has_request_variables
|
||||||
|
def json_left_side_userlist(request, user_profile, left_side_userlist=REQ(validator=check_bool,default=None)):
|
||||||
|
result = {}
|
||||||
|
if left_side_userlist is not None and \
|
||||||
|
user_profile.left_side_userlist != left_side_userlist:
|
||||||
|
do_change_left_side_userlist(user_profile, left_side_userlist)
|
||||||
|
|
||||||
|
result['left_side_userlist'] = left_side_userlist
|
||||||
|
|
||||||
|
return json_success(result)
|
||||||
|
|
||||||
@authenticated_json_post_view
|
@authenticated_json_post_view
|
||||||
@has_request_variables
|
@has_request_variables
|
||||||
def json_change_notify_settings(request, user_profile,
|
def json_change_notify_settings(request, user_profile,
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ urlpatterns += patterns('zerver.views',
|
|||||||
url(r'^json/set_muted_topics$', 'json_set_muted_topics'),
|
url(r'^json/set_muted_topics$', 'json_set_muted_topics'),
|
||||||
url(r'^json/set_avatar$', 'json_set_avatar'),
|
url(r'^json/set_avatar$', 'json_set_avatar'),
|
||||||
url(r'^json/time_setting$', 'json_time_setting'),
|
url(r'^json/time_setting$', 'json_time_setting'),
|
||||||
|
url(r'^json/left_side_userlist$', 'json_left_side_userlist'),
|
||||||
|
|
||||||
# This json format view is used by the LEGACY pre-REST API. It
|
# This json format view is used by the LEGACY pre-REST API. It
|
||||||
# requires an API key.
|
# requires an API key.
|
||||||
|
|||||||
Reference in New Issue
Block a user