summaryrefslogtreecommitdiffstats
path: root/askbot/views/commands.py
diff options
context:
space:
mode:
Diffstat (limited to 'askbot/views/commands.py')
-rw-r--r--askbot/views/commands.py110
1 files changed, 104 insertions, 6 deletions
diff --git a/askbot/views/commands.py b/askbot/views/commands.py
index e524b81f..6153a0ca 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
@@ -437,13 +439,18 @@ def mark_tag(request, **kwargs):#tagging system
reason = post_data['reason']
assert reason in ('good', 'bad', 'subscribed')
#separate plain tag names and wildcard tags
-
tagnames, wildcards = forms.clean_marked_tagnames(raw_tagnames)
- cleaned_tagnames, cleaned_wildcards = request.user.mark_tags(
- tagnames,
- wildcards,
- reason = reason,
- action = action
+
+ if request.user.is_administrator() and post_data['user'] != request.user.id:
+ user = get_object_or_404(models.User, pk=post_data['user'])
+ else:
+ user = request.user
+
+ cleaned_tagnames, cleaned_wildcards = user.mark_tags(
+ tagnames,
+ wildcards,
+ reason = reason,
+ action = action
)
#lastly - calculate tag usage counts
@@ -694,6 +701,97 @@ def subscribe_for_tags(request):
request.session['subscribe_for_tags'] = (pure_tag_names, wildcards)
return HttpResponseRedirect(url_utils.get_login_url())
+@decorators.admins_only
+def list_bulk_tag_subscription(request):
+ object_list = models.BulkTagSubscription.objects.all()
+
+ data = {
+ 'object_list': object_list
+ }
+ return render(request, 'tags/list_bulk_tag_subscription.html', data)
+
+@decorators.admins_only
+def create_bulk_tag_subscription(request):
+ data = {'action': _('Create')}
+ if request.method == "POST":
+ form = forms.BulkTagSubscriptionForm(request.POST)
+ if form.is_valid():
+ 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
+ else:
+ data['form'] = forms.BulkTagSubscriptionForm()
+
+ return render(request, 'tags/form_bulk_tag_subscription.html', data)
+
+@decorators.admins_only
+def edit_bulk_tag_subscription(request, pk):
+ bulk_subscription = get_object_or_404(models.BulkTagSubscription,
+ pk=pk)
+ data = {'action': _('Edit')}
+ if request.method == "POST":
+ 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 = {
+ 'users': bulk_subscription.users.all(),
+ 'groups': bulk_subscription.groups.all(),
+ 'tags': ' '.join([tag.name for tag in bulk_subscription.tags.all()]),
+ }
+ data.update({
+ 'bulk_subscription': bulk_subscription,
+ 'form': forms.BulkTagSubscriptionForm(initial=form_initial),
+ })
+
+ return render(request, 'tags/form_bulk_tag_subscription.html', data)
+
+@decorators.admins_only
+@decorators.post_only
+def delete_bulk_tag_subscription(request):
+ 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):