diff options
author | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-01-07 21:18:00 -0600 |
---|---|---|
committer | Adolfo Fitoria <adolfo.fitoria@gmail.com> | 2013-01-08 11:08:12 -0600 |
commit | 79834c15d8cae01bc658016db8c919bee574f15d (patch) | |
tree | 30604cd486402850a75985f10ebf8fb5312f1f23 | |
parent | 6abe5c02f9e5fef16f2422d2988bb5e42e2198fd (diff) | |
download | askbot-79834c15d8cae01bc658016db8c919bee574f15d.tar.gz askbot-79834c15d8cae01bc658016db8c919bee574f15d.tar.bz2 askbot-79834c15d8cae01bc658016db8c919bee574f15d.zip |
Create, add, delete done.
New tags are created if the admin inputs a new one on the form.
MarkedTag creation for create/edit action.
-rw-r--r-- | askbot/models/__init__.py | 9 | ||||
-rw-r--r-- | askbot/models/user.py | 44 | ||||
-rw-r--r-- | askbot/templates/tags/list_bulk_tag_subscription.html | 8 | ||||
-rw-r--r-- | askbot/urls.py | 2 | ||||
-rw-r--r-- | askbot/views/commands.py | 66 |
5 files changed, 106 insertions, 23 deletions
diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py index 1a474fa6..f8a25721 100644 --- a/askbot/models/__init__.py +++ b/askbot/models/__init__.py @@ -1346,10 +1346,11 @@ def user_mark_tags( cleaned_wildcards = list() assert(action in ('add', 'remove')) if action == 'add': - if askbot_settings.SUBSCRIBED_TAG_SELECTOR_ENABLED: - assert(reason in ('good', 'bad', 'subscribed')) - else: - assert(reason in ('good', 'bad')) + assert(reason in ('good', 'bad', 'subscribed')) + #if askbot_settings.SUBSCRIBED_TAG_SELECTOR_ENABLED: + # assert(reason in ('good', 'bad', 'subscribed')) + #else: + # assert(reason in ('good', 'bad')) if wildcards: cleaned_wildcards = self.update_wildcard_tag_selections( action = action, diff --git a/askbot/models/user.py b/askbot/models/user.py index 1d700647..d9ee1965 100644 --- a/askbot/models/user.py +++ b/askbot/models/user.py @@ -17,6 +17,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 @@ -592,6 +593,47 @@ class Group(AuthGroup): 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: + assert(tag_author) + tags, new_tag_names = get_tags_by_names(tag_names) + 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: + #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) @@ -599,6 +641,8 @@ class BulkTagSubscription(models.Model): users = models.ManyToManyField(User) groups = models.ManyToManyField(Group) + objects = BulkTagSubscriptionManager() + def tag_list(self): return [tag.name for tag in self.tags.all()] diff --git a/askbot/templates/tags/list_bulk_tag_subscription.html b/askbot/templates/tags/list_bulk_tag_subscription.html index f026269e..5ed1d2f7 100644 --- a/askbot/templates/tags/list_bulk_tag_subscription.html +++ b/askbot/templates/tags/list_bulk_tag_subscription.html @@ -36,11 +36,15 @@ </div> --> </td> - <td>{%for user in subscription.users.all() %} <a href='{% url user_profile user.id, user.username|slugify %}'>{{user.username}},</a>{%endfor%} <a href='#'>({% trans %}edit{%endtrans%}) </td> + <td>{%for user in subscription.users.all() %} <a href='{% url user_profile user.id, user.username|slugify %}'>{{user.username}},</a>{%endfor%} <a href='#'> </td> {% if settings.GROUPS_ENABLED %} <td>{%for group in subscription.groups.all() %} <a href='{% url users_by_group group.id, group.name|slugify %}'>{{group.name}}</a>{%endfor%} </td> {%endif%} - <td><a href='#'>{%trans%}Edit{%endtrans%}</a> - <a href='#'>{%trans%}Delete{%endtrans%}</a></td> + <td><a href='{% url edit_bulk_tag_subscription subscription.id %}'>{%trans%}Edit{%endtrans%}</a> - + <form action="{%url delete_bulk_tag_subscription %}" method="POST" accept-charset="utf-8"> + <input type="hidden" name="pk" value="{{subscription.id}}"/> + <input type="submit" value="Delete" /> + </form> </tr> {%endfor%} </tbody> diff --git a/askbot/urls.py b/askbot/urls.py index ab8fcc78..f5519578 100644 --- a/askbot/urls.py +++ b/askbot/urls.py @@ -230,7 +230,7 @@ urlpatterns = patterns('', name='create_bulk_tag_subscription' ), url( - r'^%s(?P<pk>\d+)/$' % _('tags/subscriptions/edit/$'), + r'^%s(?P<pk>\d+)/$' % _('tags/subscriptions/edit/'), views.commands.edit_bulk_tag_subscription, name='edit_bulk_tag_subscription' ), diff --git a/askbot/views/commands.py b/askbot/views/commands.py index 47dc7d32..4a4b7b80 100644 --- a/askbot/views/commands.py +++ b/askbot/views/commands.py @@ -41,6 +41,8 @@ from askbot.utils.forms import get_db_object_or_404 from django.template import RequestContext from askbot.skins.loaders import render_into_skin_as_string from askbot.skins.loaders import render_text_into_skin +from askbot.models.tag import get_tags_by_names + @csrf.csrf_exempt @@ -705,21 +707,20 @@ def list_bulk_tag_subscription(request): @decorators.admins_only def create_bulk_tag_subscription(request): - from askbot.models.tag import get_tags_by_names data = {'action': _('Create')} if request.method == "POST": form = forms.BulkTagSubscriptionForm(request.POST) if form.is_valid(): - bulk_subscription = models.BulkTagSubscription() - bulk_subscription.save() - tags, new_tag_names = get_tags_by_names(form.cleaned_data['tags'].split(' ')) - bulk_subscription.tags.add(*tags) - user_ids = [user.id for user in form.cleaned_data['users']] - bulk_subscription.users.add(*user_ids) - if 'groups' in form.cleaned_data: - group_ids = [user.id for user in form.cleaned_data['groups']] - bulk_subscription.groups.add(group_ids) - + tag_names = form.cleaned_data['tags'].split(' ') + user_list = form.cleaned_data.get('users') + group_list = form.cleaned_data.get('groups') + + bulk_subscription = models.BulkTagSubscription.objects.create( + tag_names=tag_names, + tag_author=request.user, + user_list=user_list, + group_list=group_list + ) return HttpResponseRedirect(reverse('list_bulk_tag_subscription')) else: data['form'] = form @@ -734,17 +735,44 @@ def edit_bulk_tag_subscription(request, pk): pk=pk) data = {'action': _('Edit')} if request.method == "POST": - pass + form = forms.BulkTagSubscriptionForm(request.POST) + if form.is_valid(): + bulk_subscription.tags.clear() + bulk_subscription.users.clear() + bulk_subscription.groups.clear() + + if 'groups' in form.cleaned_data: + group_ids = [user.id for user in form.cleaned_data['groups']] + bulk_subscription.groups.add(group_ids) + + tags, new_tag_names = get_tags_by_names(form.cleaned_data['tags'].split(' ')) + tag_id_list = [tag.id for tag in tags] + + for new_tag_name in new_tag_names: + new_tag = models.Tag.objects.create(name=new_tag_name, + created_by=request.user) + tag_id_list.append(new_tag.id) + + bulk_subscription.tags.add(*tag_id_list) + + user_ids = [] + for user in form.cleaned_data['users']: + user_ids.append(user) + user.mark_tags(bulk_subscription.tag_list(), + reason='subscribed', action='add') + + bulk_subscription.users.add(*user_ids) + + return HttpResponseRedirect(reverse('list_bulk_tag_subscription')) else: form_initial = { - 'date_added': bulk_subscription.date_added, 'users': bulk_subscription.users.all(), 'groups': bulk_subscription.groups.all(), - 'tags': bulk_subscription.tags.all(), + 'tags': ' '.join([tag.name for tag in bulk_subscription.tags.all()]), } data.update({ 'bulk_subscription': bulk_subscription, - 'form': forms.BulkTagSubscription(**form_initial), + 'form': forms.BulkTagSubscriptionForm(initial=form_initial), }) return render(request, 'tags/form_bulk_tag_subscription.html', data) @@ -752,7 +780,13 @@ def edit_bulk_tag_subscription(request, pk): @decorators.admins_only @decorators.post_only def delete_bulk_tag_subscription(request): - pass + pk = request.POST.get('pk') + if pk: + bulk_subscription = get_object_or_404(models.BulkTagSubscription, pk=pk) + bulk_subscription.delete() + return HttpResponseRedirect(reverse('list_bulk_tag_subscription')) + else: + return HttpResponseRedirect(reverse('list_bulk_tag_subscription')) @decorators.get_only def title_search(request): |