summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-08-29 03:28:55 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-08-29 03:28:55 -0400
commit8278bbeffc5346800ee12c7fae41c1c2d3fd14f7 (patch)
treefa56294e9461ab2c03b7ca642edeeca913484b3e
parent4b879e66e06f705ea25b0dbafd42c37b563338de (diff)
downloadaskbot-8278bbeffc5346800ee12c7fae41c1c2d3fd14f7.tar.gz
askbot-8278bbeffc5346800ee12c7fae41c1c2d3fd14f7.tar.bz2
askbot-8278bbeffc5346800ee12c7fae41c1c2d3fd14f7.zip
tests pass, but group-related features need some manual testing and more test cases
-rw-r--r--askbot/context.py7
-rw-r--r--askbot/mail/lamson_handlers.py11
-rw-r--r--askbot/migrations/0137_migrate_data_to_internal_group_models.py3
-rw-r--r--askbot/models/__init__.py20
-rw-r--r--askbot/models/post.py19
-rw-r--r--askbot/models/question.py18
-rw-r--r--askbot/models/tag.py58
-rw-r--r--askbot/models/user.py53
-rw-r--r--askbot/skins/default/templates/widgets/group_info.html18
-rw-r--r--askbot/tests/db_api_tests.py22
-rw-r--r--askbot/tests/page_load_tests.py4
-rw-r--r--askbot/tests/thread_model_tests.py4
-rw-r--r--askbot/tests/user_model_tests.py6
-rw-r--r--askbot/tests/utils.py5
-rw-r--r--askbot/views/commands.py42
-rw-r--r--askbot/views/users.py20
16 files changed, 154 insertions, 156 deletions
diff --git a/askbot/context.py b/askbot/context.py
index 402183ea..111845fb 100644
--- a/askbot/context.py
+++ b/askbot/context.py
@@ -55,9 +55,8 @@ def application_settings(request):
}
if askbot_settings.GROUPS_ENABLED:
- context['group_list'] = models.Tag.group_tags.get_all().filter(
- deleted=False
- ).exclude(
- name__startswith='_internal_')
+ context['group_list'] = models.Group.objects.exclude(
+ name__startswith='_internal_'
+ )
return context
diff --git a/askbot/mail/lamson_handlers.py b/askbot/mail/lamson_handlers.py
index 6bafbc3f..59d707c7 100644
--- a/askbot/mail/lamson_handlers.py
+++ b/askbot/mail/lamson_handlers.py
@@ -6,7 +6,7 @@ from django.template import Context
from django.utils.translation import ugettext as _
from lamson.routing import route, stateless
from lamson.server import Relay
-from askbot.models import ReplyAddress, Tag
+from askbot.models import ReplyAddress, Group, Tag
from askbot import mail
from askbot.conf import settings as askbot_settings
from askbot.skins.loaders import get_template
@@ -199,15 +199,12 @@ def ASK(message, host = None, addr = None):
if askbot_settings.GROUP_EMAIL_ADDRESSES_ENABLED == False:
return
try:
- group_tag = Tag.group_tags.get(
- deleted = False,
- name__iexact = addr
- )
+ group = Group.objects.get(name__iexact=addr)
mail.process_emailed_question(
from_address, subject, body_text, stored_files,
- group_id = group_tag.id
+ group_id = group.id
)
- except Tag.DoesNotExist:
+ except Group.DoesNotExist:
#do nothing because this handler will match all emails
return
except Tag.MultipleObjectsReturned:
diff --git a/askbot/migrations/0137_migrate_data_to_internal_group_models.py b/askbot/migrations/0137_migrate_data_to_internal_group_models.py
index e6388db4..0f18846e 100644
--- a/askbot/migrations/0137_migrate_data_to_internal_group_models.py
+++ b/askbot/migrations/0137_migrate_data_to_internal_group_models.py
@@ -17,9 +17,6 @@ class Migration(DataMigration):
for profile in ProgressBar(items, count, message):
group_tag = profile.group_tag
group_name = group_tag.name.replace('-', ' ')
- if group_name.startswith('_internal_'):
- group_name = group_name.replace('_internal_', '', 1)
-
group = orm['askbot.Group']()
group.name = group_name
group.logo_url = profile.logo_url
diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py
index d5758b67..6a957265 100644
--- a/askbot/models/__init__.py
+++ b/askbot/models/__init__.py
@@ -47,7 +47,7 @@ from askbot.models.user import AuthUserGroups as GroupMembership
from askbot.models.user import Group
from askbot.models.post import Post, PostRevision
from askbot.models.post import PostFlagReason, AnonymousAnswer
-from askbot.models.post import PostToGroup2 as PostToGroup
+from askbot.models.post import PostToGroup
from askbot.models.post import DraftAnswer
from askbot.models.reply_by_email import ReplyAddress
from askbot.models import signals
@@ -2207,11 +2207,11 @@ def get_profile_link(self):
def user_get_groups(self, private=False):
"""returns a query set of groups to which user belongs"""
#todo: maybe cache this query
- return Tag.group_tags.get_for_user(self, private=private)
+ return Group.objects.get_for_user(self, private=private)
def user_get_personal_group(self):
group_name = format_personal_group_name(self)
- return Tag.group_tags.get(name=group_name)
+ return Group.objects.get(name=group_name)
def user_get_foreign_groups(self):
"""returns a query set of groups to which user does not belong"""
@@ -2243,8 +2243,6 @@ def user_get_groups_membership_info(self, groups):
``groups`` is a group tag query set
"""
- groups = groups.select_related('group_profile')
-
group_ids = groups.values_list('id', flat = True)
memberships = GroupMembership.objects.filter(
user__id = self.id,
@@ -2258,7 +2256,7 @@ def user_get_groups_membership_info(self, groups):
info[membership.group_id]['is_member'] = True
for group in groups:
- info[group.id]['can_join'] = group.group_profile.can_accept_user(self)
+ info[group.id]['can_join'] = group.can_accept_user(self)
return info
@@ -2634,8 +2632,12 @@ def user_join_group(self, group):
def user_leave_group(self, group):
self.edit_group_membership(group=group, user=self, action='remove')
-def user_is_group_member(self, group = None):
- return self.group_memberships.filter(group = group).count() == 1
+def user_is_group_member(self, group=None):
+ import pdb
+ pdb.set_trace()
+ return GroupMembership.objects.filter(
+ user=self, group=group
+ ).count() == 1
User.add_to_class(
'add_missing_askbot_subscriptions',
@@ -3371,7 +3373,7 @@ def add_user_to_personal_group(sender, instance, created, **kwargs):
#in theore here we may have two users that will have
#identical group names!!!
group_name = format_personal_group_name(instance)
- group = Tag.group_tags.get_or_create(
+ group = Group.objects.get_or_create(
group_name=group_name, user=instance
)
instance.edit_group_membership(
diff --git a/askbot/models/post.py b/askbot/models/post.py
index 0ca31750..fb9491f1 100644
--- a/askbot/models/post.py
+++ b/askbot/models/post.py
@@ -27,6 +27,7 @@ from askbot import const
from askbot.models.user import Activity
from askbot.models.user import EmailFeedSetting
from askbot.models.user import Group
+from askbot.models.user import AuthUserGroups as GroupMembership
from askbot.models.tag import Tag, MarkedTag
from askbot.models.tag import get_groups, tags_match_some_wildcard
from askbot.models.tag import get_global_group
@@ -41,7 +42,7 @@ from askbot.utils.diff import textDiff as htmldiff
from askbot.utils import mysql
-class PostToGroup2(models.Model):
+class PostToGroup(models.Model):
post = models.ForeignKey('Post')
group = models.ForeignKey(Group)
@@ -320,7 +321,7 @@ class Post(models.Model):
parent = models.ForeignKey('Post', blank=True, null=True, related_name='comments') # Answer or Question for Comment
thread = models.ForeignKey('Thread', blank=True, null=True, default = None, related_name='posts')
- new_groups = models.ManyToManyField(Group, through='PostToGroup2')
+ groups = models.ManyToManyField(Group, through='PostToGroup')
author = models.ForeignKey(User, related_name='posts')
added_at = models.DateTimeField(default=datetime.datetime.now)
@@ -558,21 +559,21 @@ class Post(models.Model):
def add_to_groups(self, groups):
#todo: use bulk-creation
for group in groups:
- PostToGroup.objects.get_or_create(post=self, tag=group)
+ PostToGroup.objects.get_or_create(post=self, group=group)
if self.is_answer() or self.is_question():
comments = self.comments.all()
for group in groups:
for comment in comments:
- PostToGroup.objects.get_or_create(post=comment, tag=group)
+ PostToGroup.objects.get_or_create(post=comment, group=group)
def remove_from_groups(self, groups):
- PostToGroup.objects.filter(post=self, tag__in=groups).delete()
+ PostToGroup.objects.filter(post=self, group__in=groups).delete()
if self.is_answer() or self.is_question():
comment_ids = self.comments.all().values_list('id', flat=True)
PostToGroup.objects.filter(
post__id__in=comment_ids,
- tag__in=groups
+ group__in=groups
).delete()
@@ -650,7 +651,7 @@ class Post(models.Model):
todo: this is a copy-paste in thread and post
"""
if group_id:
- group = Tag.group_tags.get(id=group_id)
+ group = Group.objects.get(id=group_id)
groups = [group]
self.add_to_groups(groups)
@@ -1965,9 +1966,9 @@ class PostRevision(models.Model):
if self.by_email and self.email_address:
group_name = self.email_address.split('@')[0]
try:
- group = Tag.objects.get(name = group_name, deleted = False)
+ group = Group.objects.get(name = group_name, deleted = False)
return group.group.profile.moderate_email
- except Tag.DoesNotExist:
+ except Group.DoesNotExist:
pass
return True
return False
diff --git a/askbot/models/question.py b/askbot/models/question.py
index 85495e08..c30d7089 100644
--- a/askbot/models/question.py
+++ b/askbot/models/question.py
@@ -24,7 +24,7 @@ from askbot.models.tag import delete_tags, separate_unused_tags
from askbot.models.base import DraftContent, BaseQuerySetManager
from askbot.models.tag import Tag, get_groups
from askbot.models.post import Post, PostRevision
-from askbot.models.post import PostToGroup2 as PostToGroup
+from askbot.models.post import PostToGroup
from askbot.models.user import Group
from askbot.models import signals
from askbot import const
@@ -534,11 +534,19 @@ class Thread(models.Model):
groups = self.groups.filter(name__startswith='_internal_')
if exclude_user:
- groups = groups.exclude(created_by__id=exclude_user.id)
+ exclude_user_group = exclude_user.get_personal_group()
+ groups = groups.exclude(name=exclude_user_group.name)
- user_ids = groups.values_list('created_by__id', flat=True)
if max_count:
- user_ids = user_ids[:max_count]
+ groups = groups[:max_count]
+
+ from askbot.models import GroupMembership
+ user_ids = GroupMembership.objects.filter(
+ group__in=groups
+ ).values_list(
+ 'user__id', flat=True
+ )
+
return User.objects.filter(id__in=user_ids)
def get_groups_shared_with(self, max_count=None):
@@ -904,7 +912,7 @@ class Thread(models.Model):
The add by ID now only works if user belongs to that group
"""
if group_id:
- group = Tag.group_tags.get(id=group_id)
+ group = Group.objects.get(id=group_id)
groups = [group]
self.add_to_groups(groups)
diff --git a/askbot/models/tag.py b/askbot/models/tag.py
index 5b6d7076..c04b36da 100644
--- a/askbot/models/tag.py
+++ b/askbot/models/tag.py
@@ -17,15 +17,11 @@ def get_global_group():
#revert the values
#todo: change groups to django groups
group_name = askbot_settings.GLOBAL_GROUP_NAME
+ from askbot.models import Group
try:
- return Tag.group_tags.get(name=group_name)
- except Tag.DoesNotExist:
- from askbot.models import get_admin
- return Tag.group_tags.get_or_create(
- group_name=group_name,
- user=get_admin(),
- is_open=False
- )
+ return Group.objects.get(name=group_name)
+ except Group.DoesNotExist:
+ return Group.objects.create(name=group_name, is_open=False)
def delete_tags(tags):
"""deletes tags in the list"""
@@ -282,28 +278,6 @@ class TagManager(BaseQuerySetManager):
return created_tags
-class GroupTagQuerySet(TagQuerySet):
- """Custom query set for the group"""
-
- def get_for_user(self, user=None, private=False):
- if private:
- global_group = get_global_group()
- return self.filter(
- user_memberships__user=user
- ).exclude(id=global_group.id)
- else:
- return self.filter(user_memberships__user = user)
-
- def get_all(self):
- return self.annotate(
- member_count = models.Count('user_memberships')
- ).filter(
- member_count__gt = 0
- )
-
- def get_by_name(self, group_name = None):
- return self.get(name = clean_group_name(group_name))
-
def clean_group_name(name):
"""group names allow spaces,
@@ -311,29 +285,6 @@ def clean_group_name(name):
to replace spaces with dashes"""
return re.sub('\s+', '-', name.strip())
-class GroupTagManager(BaseQuerySetManager):
- """manager for group tags"""
-
- def get_query_set(self):
- return GroupTagQuerySet(self.model)
-
- def get_or_create(self, group_name = None, user = None, is_open=True):
- """creates a group tag or finds one, if exists"""
- #todo: here we might fill out the group profile
-
- #replace spaces with dashes
- group_name = clean_group_name(group_name)
- try:
- #iexact is important!!! b/c we don't want case variants
- #of tags
- tag = self.get(name__iexact = group_name)
- except self.model.DoesNotExist:
- tag = self.model(name = group_name, created_by = user)
- tag.save()
- from askbot.models.user import GroupProfile
- group_profile = GroupProfile(group_tag = tag, is_open=is_open)
- group_profile.save()
- return tag
class Tag(models.Model):
#a couple of status constants
@@ -364,7 +315,6 @@ class Tag(models.Model):
)
objects = TagManager()
- group_tags = GroupTagManager()
class Meta:
app_label = 'askbot'
diff --git a/askbot/models/user.py b/askbot/models/user.py
index a5b6dd1b..0eb48f6f 100644
--- a/askbot/models/user.py
+++ b/askbot/models/user.py
@@ -14,7 +14,9 @@ from django.utils.html import strip_tags
from askbot import const
from askbot.conf import settings as askbot_settings
from askbot.utils import functions
-from askbot.models.tag import Tag
+from askbot.models.base import BaseQuerySetManager
+from askbot.models.tag import Tag, get_global_group
+from askbot.models.tag import clean_group_name#todo - delete this
from askbot.forms import DomainNameField
from askbot.utils.forms import email_is_allowed
@@ -355,6 +357,49 @@ class AuthUserGroups(models.Model):
managed = False
+class GroupQuerySet(models.query.QuerySet):
+ """Custom query set for the group"""
+
+ def get_for_user(self, user=None, private=False):
+ if private:
+ global_group = get_global_group()
+ return self.filter(
+ user=user
+ ).exclude(id=global_group.id)
+ else:
+ return self.filter(user = user)
+
+ def get_by_name(self, group_name = None):
+ return self.get(name = clean_group_name(group_name))
+
+
+class GroupManager(BaseQuerySetManager):
+ """model manager for askbot groups"""
+
+ def get_query_set(self):
+ return GroupQuerySet(self.model)
+
+ def create(self, **kwargs):
+ name = kwargs['name']
+ try:
+ group_ptr = AuthGroup.objects.get(name=name)
+ kwargs['group_ptr'] = group_ptr
+ except AuthGroup.DoesNotExist:
+ pass
+ return super(GroupManager, self).create(**kwargs)
+
+ def get_or_create(self, group_name = None, user = None, is_open=True):
+ """creates a group tag or finds one, if exists"""
+ #todo: here we might fill out the group profile
+ try:
+ #iexact is important!!! b/c we don't want case variants
+ #of tags
+ group = self.get(name__iexact = group_name)
+ except self.model.DoesNotExist:
+ group = self.create(name=group_name, is_open=is_open)
+ return group
+
+
class Group(AuthGroup):
"""group profile for askbot"""
logo_url = models.URLField(null = True)
@@ -370,6 +415,8 @@ class Group(AuthGroup):
null = True, blank = True, default = ''
)
+ objects = GroupManager()
+
class Meta:
app_label = 'askbot'
db_table = 'askbot_group'
@@ -380,7 +427,7 @@ class Group(AuthGroup):
return False
#a special case - automatic global group cannot be joined or left
- if self.group_tag.name == askbot_settings.GLOBAL_GROUP_NAME:
+ if self.name == askbot_settings.GLOBAL_GROUP_NAME:
return False
if self.is_open:
@@ -423,4 +470,4 @@ class Group(AuthGroup):
def save(self, *args, **kwargs):
self.clean()
- super(GroupProfile, self).save(*args, **kwargs)
+ super(Group, self).save(*args, **kwargs)
diff --git a/askbot/skins/default/templates/widgets/group_info.html b/askbot/skins/default/templates/widgets/group_info.html
index 5d3a4c7f..85fcd693 100644
--- a/askbot/skins/default/templates/widgets/group_info.html
+++ b/askbot/skins/default/templates/widgets/group_info.html
@@ -2,8 +2,8 @@
<div id="group-wiki-{{group.id}}" class="box group-wiki">
<h2>{% trans %}Group info{% endtrans %}</h2>
<img class="group-logo"
- {% if group.group_profile.logo_url %}
- src="{{ group.group_profile.logo_url }}"
+ {% if group.logo_url %}
+ src="{{ group.logo_url }}"
{% else %}
style="display:none"
{% endif %}
@@ -24,7 +24,7 @@
<div class="controls">
<a class="edit-description"
>{% trans %}edit description{% endtrans %}</a>
- {% if group.group_profile.logo_url %}
+ {% if group.logo_url %}
<span>|</span>
<a class="change-logo"
>{% trans %}change logo{% endtrans %}</a>
@@ -39,7 +39,7 @@
{% if group_email_moderation_enabled %}
<input type="checkbox"
id="moderate-email"
- {% if group.group_profile.moderate_email %}checked="checked"{% endif %}
+ {% if group.moderate_email %}checked="checked"{% endif %}
data-toggle-url="{% url toggle_group_profile_property %}"
/>
<label for="moderate-email">
@@ -49,7 +49,7 @@
{% endif %}
<input type="checkbox"
id="open-or-close-group"
- {% if group.group_profile.is_open %}checked="checked"{% endif %}
+ {% if group.is_open %}checked="checked"{% endif %}
data-toggle-url="{% url toggle_group_profile_property %}"
/>
<label for="open-or-close-group">
@@ -59,8 +59,8 @@
<a
id="preapproved-emails"
title="{% trans %}list of email addresses of pre-approved users{% endtrans %}"
- data-object-id="{{group.group_profile.id}}"
- data-model-name="GroupProfile"
+ data-object-id="{{group.group_ptr_id}}"
+ data-model-name="Group"
data-property-name="preapproved_emails"
data-url="{% url edit_object_property_text %}"
data-editor-heading="{% trans %}List of preapproved email addresses{% endtrans %}"
@@ -70,8 +70,8 @@
<a
id="preapproved-email-domains"
title="{% trans %}list of preapproved email address domain names{% endtrans %}"
- data-object-id="{{group.group_profile.id}}"
- data-model-name="GroupProfile"
+ data-object-id="{{group.group_ptr_id}}"
+ data-model-name="Group"
data-property-name="preapproved_email_domains"
data-url="{% url edit_object_property_text %}"
data-editor-heading="{% trans %}List of preapproved email domain names{% endtrans %}"
diff --git a/askbot/tests/db_api_tests.py b/askbot/tests/db_api_tests.py
index 07590487..909616ff 100644
--- a/askbot/tests/db_api_tests.py
+++ b/askbot/tests/db_api_tests.py
@@ -431,13 +431,6 @@ class TagAndGroupTests(AskbotTestCase):
'answer_comment': answer_comment
}
- def test_group_cannot_create_case_variant_tag(self):
- self.post_question(user = self.u1, tags = 'one two three')
- models.Tag.group_tags.get_or_create(user = self.u1, group_name = 'One')
- tag_one = models.Tag.objects.filter(name__iexact = 'one')
- self.assertEqual(tag_one.count(), 1)
- self.assertEqual(tag_one[0].name, 'one')
-
def test_posts_added_to_global_group(self):
q = self.post_question(user=self.u1)
group_name = askbot_settings.GLOBAL_GROUP_NAME
@@ -579,3 +572,18 @@ class TagAndGroupTests(AskbotTestCase):
visible_threads = models.Thread.objects.get_visible(AnonymousUser())
self.assertEqual(visible_threads.count(), 0)
+
+class GroupTests(AskbotTestCase):
+
+ def setUp(self):
+ self.u1 = self.create_user('user1')
+
+ def test_join_group(self):
+ #create group
+ group = models.Group(name='somegroup')
+ group.save()
+ #join
+ self.u1.join_group(group)
+ #assert membership of askbot group object
+ found_count = self.u1.get_groups().filter(name='somegroup').count()
+ self.assertEqual(found_count, 1)
diff --git a/askbot/tests/page_load_tests.py b/askbot/tests/page_load_tests.py
index f3e10c1e..a3f36e80 100644
--- a/askbot/tests/page_load_tests.py
+++ b/askbot/tests/page_load_tests.py
@@ -520,9 +520,9 @@ class PageLoadTestCase(AskbotTestCase):
)
def test_user_page_with_groups_enabled(self):
- askbot_settings.GROUPS_ENABLED = True
+ askbot_settings.update('GROUPS_ENABLED', True)
self.try_url('users', status_code=302)
- askbot_settings.GROUPS_ENABLED = False
+ askbot_settings.update('GROUPS_ENABLED', False)
self.try_url('users', status_code=200)
class AvatarTests(AskbotTestCase):
diff --git a/askbot/tests/thread_model_tests.py b/askbot/tests/thread_model_tests.py
index 3f313ff3..45a704c0 100644
--- a/askbot/tests/thread_model_tests.py
+++ b/askbot/tests/thread_model_tests.py
@@ -19,9 +19,7 @@ class ThreadModelTestsWithGroupsEnabled(AskbotTestCase):
'm_and_c': 'i'
}
)
- self.group = models.Tag.group_tags.get_or_create(
- group_name = 'jockeys', user = self.admin
- )
+ self.group = models.Group.objects.get_or_create(group_name = 'jockeys')
self.admin.edit_group_membership(
group = self.group,
user = self.admin,
diff --git a/askbot/tests/user_model_tests.py b/askbot/tests/user_model_tests.py
index 7a8fd9f2..df4974dd 100644
--- a/askbot/tests/user_model_tests.py
+++ b/askbot/tests/user_model_tests.py
@@ -9,12 +9,8 @@ class UserModelTests(AskbotTestCase):
def test_new_user_has_personal_group(self):
user = User.objects.create_user('somebody', 'somebody@example.com')
group_name = format_personal_group_name(user)
- group = models.Tag.objects.filter(name=group_name)
+ group = models.Group.objects.filter(name=group_name)
self.assertEqual(group.count(), 1)
-
- group_profile = models.GroupProfile.objects.filter(group_tag=group)
- self.assertEqual(group_profile.count(), 1)
-
memberships = models.GroupMembership.objects.filter(
group=group, user=user
)
diff --git a/askbot/tests/utils.py b/askbot/tests/utils.py
index 99f43677..eea9b96b 100644
--- a/askbot/tests/utils.py
+++ b/askbot/tests/utils.py
@@ -252,10 +252,7 @@ class AskbotTestCase(TestCase):
return tag
def create_group(self, group_name=None, user=None):
- return models.Tag.group_tags.get_or_create(
- group_name='private',
- user=self.u1
- )
+ return models.Group.objects.get_or_create(group_name='private')
def post_comment(
self,
diff --git a/askbot/views/commands.py b/askbot/views/commands.py
index 50a94d6a..abc1457d 100644
--- a/askbot/views/commands.py
+++ b/askbot/views/commands.py
@@ -656,12 +656,12 @@ def get_groups_list(request):
"""returns names of group tags
for the autocomplete function"""
global_group = get_global_group()
- group_names = models.Tag.group_tags.get_all().filter(
+ group_names = models.Group.objects.all().filter(
deleted = False
).exclude(
- name=global_group.name
- ).exclude(
name__startswith='_internal_'
+ ).exclude(
+ name=global_group.name
).values_list(
'name', flat = True
)
@@ -896,7 +896,7 @@ def edit_group_membership(request):
#warning: possible race condition
if action == 'add':
group_params = {'group_name': group_name, 'user': user}
- group = models.Tag.group_tags.get_or_create(**group_params)
+ group = models.Group.objects.get_or_create(**group_params)
request.user.edit_group_membership(user, group, 'add')
template = get_template('widgets/group_snippet.html')
return {
@@ -906,9 +906,9 @@ def edit_group_membership(request):
}
elif action == 'remove':
try:
- group = models.Tag.group_tags.get_by_name(group_name = group_name)
+ group = models.Group.objects.get(group_name = group_name)
request.user.edit_group_membership(user, group, 'remove')
- except models.Tag.DoesNotExist:
+ except models.Group.DoesNotExist:
raise exceptions.PermissionDenied()
else:
raise exceptions.PermissionDenied()
@@ -926,9 +926,9 @@ def save_group_logo_url(request):
if form.is_valid():
group_id = form.cleaned_data['group_id']
image_url = form.cleaned_data['image_url']
- group = models.Tag.group_tags.get(id = group_id)
- group.group_profile.logo_url = image_url
- group.group_profile.save()
+ group = models.Group.objects.get(id = group_id)
+ group.logo_url = image_url
+ group.save()
else:
raise ValueError('invalid data found when saving group logo')
@@ -939,9 +939,9 @@ def save_group_logo_url(request):
@decorators.admins_only
def delete_group_logo(request):
group_id = IntegerField().clean(int(request.POST['group_id']))
- group = models.Tag.group_tags.get(id = group_id)
- group.group_profile.logo_url = None
- group.group_profile.save()
+ group = models.Group.objects.get(id = group_id)
+ group.logo_url = None
+ group.save()
@csrf.csrf_exempt
@@ -964,10 +964,10 @@ def toggle_group_profile_property(request):
property_name = CharField().clean(request.POST['property_name'])
assert property_name in ('is_open', 'moderate_email')
- group = models.Tag.objects.get(id = group_id)
- new_value = not getattr(group.group_profile, property_name)
- setattr(group.group_profile, property_name, new_value)
- group.group_profile.save()
+ group = models.Group.objects.get(id = group_id)
+ new_value = not getattr(group, property_name)
+ setattr(group, property_name, new_value)
+ group.save()
return {'is_enabled': new_value}
@@ -980,8 +980,8 @@ def edit_object_property_text(request):
property_name = CharField().clean(request.REQUEST['property_name'])
accessible_fields = (
- ('GroupProfile', 'preapproved_emails'),
- ('GroupProfile', 'preapproved_email_domains')
+ ('Group', 'preapproved_emails'),
+ ('Group', 'preapproved_email_domains')
)
if (model_name, property_name) not in accessible_fields:
@@ -1007,7 +1007,7 @@ def join_or_leave_group(request):
raise exceptions.PermissionDenied()
group_id = IntegerField().clean(request.POST['group_id'])
- group = models.Tag.objects.get(id = group_id)
+ group = models.Group.objects.get(id = group_id)
if request.user.is_group_member(group):
action = 'remove'
@@ -1070,7 +1070,7 @@ def moderate_suggested_tag(request):
thread_id = form.cleaned_data.get('thread_id', None)
try:
- tag = models.Tag.objects.get(id = tag_id)#can tag not exist?
+ tag = models.Tag.objects.get(id=tag_id)#can tag not exist?
except models.Tag.DoesNotExist:
return
@@ -1208,7 +1208,7 @@ def share_question_with_group(request):
if group_name == askbot_settings.GLOBAL_GROUP_NAME:
thread.make_public(recursive=True)
else:
- group = models.Tag.group_tags.get(name=group_name)
+ group = models.Group.objects.get(name=group_name)
thread.add_to_groups((group,), recursive=True)
#get notif sets after
diff --git a/askbot/views/users.py b/askbot/views/users.py
index c5b95390..d76712e6 100644
--- a/askbot/views/users.py
+++ b/askbot/views/users.py
@@ -81,18 +81,17 @@ def show_users(request, by_group=False, group_id=None, group_slug=None):
return HttpResponseRedirect('groups')
else:
try:
- group = models.Tag.group_tags.get(id = group_id)
+ group = models.Group.objects.get(id = group_id)
group_email_moderation_enabled = \
(
askbot_settings.GROUP_EMAIL_ADDRESSES_ENABLED \
and askbot_settings.ENABLE_CONTENT_MODERATION
)
- user_can_join_group = group.group_profile.can_accept_user(request.user)
- except models.Tag.DoesNotExist:
+ user_can_join_group = group.can_accept_user(request.user)
+ except models.Group.DoesNotExist:
raise Http404
if group_slug == slugify(group.name):
- users = users.filter(
- group_memberships__group__id = group_id
+ users = users.filter(groups__id = group_id
)
if request.user.is_authenticated():
user_is_group_member = bool(
@@ -462,7 +461,7 @@ def user_stats(request, user, context):
badges = badges_dict.items()
badges.sort(key=operator.itemgetter(1), reverse=True)
- user_groups = models.Tag.group_tags.get_for_user(user = user)
+ user_groups = models.Group.objects.get_for_user(user = user)
user_groups = user_groups.exclude(name__startswith='_internal_')
global_group = get_global_group()
user_groups = user_groups.exclude(name=global_group.name)
@@ -1011,15 +1010,14 @@ def groups(request, id = None, slug = None):
scope = 'all-groups'
if scope == 'all-groups':
- groups = models.Tag.group_tags.get_all()
+ groups = models.Group.objects.all()
else:
- groups = models.Tag.group_tags.get_for_user(
- user = request.user
+ groups = models.Group.objects.get_for_user(
+ user=request.user
)
groups = groups.exclude(name__startswith='_internal_')
- groups = groups.annotate(users_count=Count('user_memberships'))
- groups = groups.select_related('group_profile')
+ groups = groups.annotate(users_count=Count('user'))
user_can_add_groups = request.user.is_authenticated() and \
request.user.is_administrator_or_moderator()