diff options
Diffstat (limited to 'askbot/models/user.py')
-rw-r--r-- | askbot/models/user.py | 70 |
1 files changed, 65 insertions, 5 deletions
diff --git a/askbot/models/user.py b/askbot/models/user.py index 6601fc7e..5fb5b991 100644 --- a/askbot/models/user.py +++ b/askbot/models/user.py @@ -18,6 +18,7 @@ from askbot.utils import functions from askbot.models.base import BaseQuerySetManager from askbot.models.tag import Tag from askbot.models.tag import clean_group_name#todo - delete this +from askbot.models.tag import get_tags_by_names from askbot.forms import DomainNameField from askbot.utils.forms import email_is_allowed @@ -56,7 +57,7 @@ class ActivityManager(models.Manager): mentioned_at = None, mentioned_in = None, reported = None - ): + ): #todo: automate this using python inspect module kwargs = dict() @@ -95,7 +96,7 @@ class ActivityManager(models.Manager): return mention_activity def get_mentions( - self, + self, mentioned_by = None, mentioned_whom = None, mentioned_at = None, @@ -317,8 +318,8 @@ class EmailFeedSetting(models.Model): else: reported_at = '%s' % self.reported_at.strftime('%d/%m/%y %H:%M') return 'Email feed for %s type=%s, frequency=%s, reported_at=%s' % ( - self.subscriber, - self.feed_type, + self.subscriber, + self.feed_type, self.frequency, reported_at ) @@ -425,7 +426,7 @@ class GroupQuerySet(models.query.QuerySet): class GroupManager(BaseQuerySetManager): """model manager for askbot groups""" - + def get_query_set(self): return GroupQuerySet(self.model) @@ -592,3 +593,62 @@ class Group(AuthGroup): def save(self, *args, **kwargs): self.clean() super(Group, self).save(*args, **kwargs) + +class BulkTagSubscriptionManager(BaseQuerySetManager): + + def create(self, tag_names=[], + user_list=[], group_list=[], + tag_author=None, **kwargs): + + new_object = super(BulkTagSubscriptionManager, self).create(**kwargs) + tag_name_list = [] + + if tag_names: + tags, new_tag_names = get_tags_by_names(tag_names) + if new_tag_names: + assert(tag_author) + + tags_id_list= [tag.id for tag in tags] + tag_name_list = [tag.name for tag in tags] + + for tag_name in new_tag_names: + new_tag = Tag.objects.create(name=tagname, created_by=tag_author) + tags_id_list.append(new_tag.id) + tag_name_list.append(new_tag.name) + + new_object.tags.add(*tags_id_list) + + if user_list: + user_ids = [] + for user in user_list: + user_ids.append(user.id) + user.mark_tags(tagnames=tag_name_list, + reason='subscribed', + action='add') + + new_object.users.add(*user_ids) + + if group_list: + group_ids = [] + for group in group_list: + #TODO: do the group marked tag thing here + group_ids.append(group.id) + new_object.groups.add(*group_ids) + + return new_object + + +class BulkTagSubscription(models.Model): + date_added = models.DateField(auto_now_add=True) + tags = models.ManyToManyField(Tag) + users = models.ManyToManyField(User) + groups = models.ManyToManyField(Group) + + objects = BulkTagSubscriptionManager() + + def tag_list(self): + return [tag.name for tag in self.tags.all()] + + class Meta: + app_label = 'askbot' + ordering = ['-date_added'] |