summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdolfo Fitoria <adolfo.fitoria@gmail.com>2013-01-07 21:18:00 -0600
committerAdolfo Fitoria <adolfo.fitoria@gmail.com>2013-01-08 11:08:12 -0600
commit79834c15d8cae01bc658016db8c919bee574f15d (patch)
tree30604cd486402850a75985f10ebf8fb5312f1f23
parent6abe5c02f9e5fef16f2422d2988bb5e42e2198fd (diff)
downloadaskbot-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__.py9
-rw-r--r--askbot/models/user.py44
-rw-r--r--askbot/templates/tags/list_bulk_tag_subscription.html8
-rw-r--r--askbot/urls.py2
-rw-r--r--askbot/views/commands.py66
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>&nbsp; - &nbsp;<a href='#'>{%trans%}Delete{%endtrans%}</a></td>
+ <td><a href='{% url edit_bulk_tag_subscription subscription.id %}'>{%trans%}Edit{%endtrans%}</a>&nbsp; - &nbsp;
+ <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):