diff --git a/zerver/lib/actions.py b/zerver/lib/actions.py index 798a5e7382..91dcb6b54b 100644 --- a/zerver/lib/actions.py +++ b/zerver/lib/actions.py @@ -3556,9 +3556,9 @@ def notify_realm_emoji(realm): user_ids = [userdict['id'] for userdict in get_active_user_dicts_in_realm(realm)] send_event(event, user_ids) -def check_add_realm_emoji(realm, name, img_url): - # type: (Realm, Text, Text) -> None - emoji = RealmEmoji(realm=realm, name=name, img_url=img_url) +def check_add_realm_emoji(realm, name, img_url, author=None): + # type: (Realm, Text, Text, Optional[UserProfile]) -> None + emoji = RealmEmoji(realm=realm, name=name, img_url=img_url, author=author) emoji.full_clean() emoji.save() notify_realm_emoji(realm) diff --git a/zerver/migrations/0046_realmemoji_author.py b/zerver/migrations/0046_realmemoji_author.py new file mode 100644 index 0000000000..dc7001d32b --- /dev/null +++ b/zerver/migrations/0046_realmemoji_author.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.10.4 on 2016-12-20 07:02 +from __future__ import unicode_literals + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('zerver', '0045_realm_waiting_period_threshold'), + ] + + operations = [ + migrations.AddField( + model_name='realmemoji', + name='author', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + ] diff --git a/zerver/models.py b/zerver/models.py index f87731b71a..7fb2da03e2 100644 --- a/zerver/models.py +++ b/zerver/models.py @@ -354,6 +354,7 @@ def list_of_domains_for_realm(realm): return list(RealmAlias.objects.filter(realm = realm).values_list('domain', flat=True)) class RealmEmoji(ModelReprMixin, models.Model): + author = models.ForeignKey('UserProfile', blank=True, null=True) realm = models.ForeignKey(Realm) # type: Realm # Second part of the regex (negative lookbehind) disallows names ending with one of the punctuation characters name = models.TextField(validators=[MinLengthValidator(1), diff --git a/zerver/tests/test_realm_emoji.py b/zerver/tests/test_realm_emoji.py index 5891f11510..5a85344a6b 100644 --- a/zerver/tests/test_realm_emoji.py +++ b/zerver/tests/test_realm_emoji.py @@ -21,11 +21,14 @@ class RealmEmojiTest(ZulipTestCase): def test_upload(self): # type: () -> None - self.login("iago@zulip.com") + email = "iago@zulip.com" + self.login(email) data = {"name": "my_emoji", "url": "https://example.com/my_emoji"} result = self.client_put("/json/realm/emoji", info=data) self.assert_json_success(result) self.assertEqual(200, result.status_code) + emoji = RealmEmoji.objects.get(name=data['name']) + self.assertEqual(emoji.author.email, email) result = self.client_get("/json/realm/emoji") content = ujson.loads(result.content) diff --git a/zerver/views/realm_emoji.py b/zerver/views/realm_emoji.py index 54e5919a14..318263d192 100644 --- a/zerver/views/realm_emoji.py +++ b/zerver/views/realm_emoji.py @@ -18,7 +18,7 @@ def upload_emoji(request, user_profile): emoji_name = request.POST.get('name', None) emoji_url = request.POST.get('url', None) try: - check_add_realm_emoji(user_profile.realm, emoji_name, emoji_url) + check_add_realm_emoji(user_profile.realm, emoji_name, emoji_url, author=user_profile) except ValidationError as e: return json_error(e.messages[0]) return json_success()