diff options
author | nishanth | 2010-02-28 13:25:24 +0530 |
---|---|---|
committer | nishanth | 2010-02-28 13:25:24 +0530 |
commit | 42c60f17e97c0712891f1a9b016e9ccb15e1cba7 (patch) | |
tree | f9e073464d033d10b06564faa3514ffe30498616 | |
parent | 81b85e91f81aa28fd175179bcf692ab2b6c9e0e1 (diff) | |
download | pytask-42c60f17e97c0712891f1a9b016e9ccb15e1cba7.tar.gz pytask-42c60f17e97c0712891f1a9b016e9ccb15e1cba7.tar.bz2 pytask-42c60f17e97c0712891f1a9b016e9ccb15e1cba7.zip |
added the functionality to request a user to be AD MG DV.
-rw-r--r-- | taskapp/forms/user.py | 11 | ||||
-rw-r--r-- | taskapp/utilities/notification.py | 6 | ||||
-rw-r--r-- | taskapp/views/task.py | 28 | ||||
-rw-r--r-- | taskapp/views/user.py | 65 | ||||
-rw-r--r-- | templates/index.html | 4 | ||||
-rw-r--r-- | templates/user/changerole.html | 11 | ||||
-rw-r--r-- | urls.py | 1 |
7 files changed, 102 insertions, 24 deletions
diff --git a/taskapp/forms/user.py b/taskapp/forms/user.py index 7dc1f25..fe2121e 100644 --- a/taskapp/forms/user.py +++ b/taskapp/forms/user.py @@ -2,11 +2,10 @@ from django import forms from pytask.taskapp.models import GENDER_CHOICES, Profile -from django.forms import ModelForm from registration.forms import RegistrationFormUniqueEmail from registration.models import RegistrationProfile -class UserProfileEditForm(ModelForm): +class UserProfileEditForm(forms.ModelForm): """Form used to edit the profile of a user""" class Meta: @@ -26,3 +25,11 @@ class RegistrationFormCustom(RegistrationFormUniqueEmail): new_profile.save() return new_user + +def UserChoiceForm(choices, instance=None): + """ take a list of users and return a choice form. + """ + + class myForm(forms.Form): + user = forms.ChoiceField(choices, required=True) + return myForm(instance) if instance else myForm() diff --git a/taskapp/utilities/notification.py b/taskapp/utilities/notification.py index 4e7396d..f95349d 100644 --- a/taskapp/utilities/notification.py +++ b/taskapp/utilities/notification.py @@ -71,14 +71,14 @@ def create_notification(role, sent_to, sent_from=None, reply=None, task=None, re elif role in ["DV", "MG", "AD"]: accepting_user = sent_from - user_url = "/user/view/uid=%s"%(accepting_user.id) ## i mean the user who has accepted it - requested_by_url = "/user/view/uid=%s"%(requested_by.id) + user_url = '<a href="/user/view/uid=%s">%s</a>'%(accepting_user.id, accepting_user.username) ## i mean the user who has accepted it + requested_by_url = '<a href="/user/view/uid=%s">%s</a>'%(requested_by.id, requested_by.username) role_rights = dict(RIGHTS_CHOICES)[role] role_learn_url = "/about/%s"%role_rights.lower() if reply: notification.sub = "New %s for the site"%role_rights - notification.message = "%s has accepted request made by %s asking him to act as a %s for the website.<br />"(user_url, requested_by_url, role_rights) + notification.message = "%s has accepted request made by %s asking him to act as a %s for the website.<br />"%(user_url, requested_by_url, role_rights) else: notification.sub = "Rejected your request to act as %s"%role_rights notification.message = "%s has rejected your request asking him to act as a %s.<br />"%(new_mentor_url, task_url) diff --git a/taskapp/views/task.py b/taskapp/views/task.py index 1dac325..d06689e 100644 --- a/taskapp/views/task.py +++ b/taskapp/views/task.py @@ -16,7 +16,7 @@ from pytask.taskapp.utilities.user import get_user def browse_tasks(request): """ display all the tasks """ - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task_list = Task.objects.exclude(status="UP").exclude(status="DL").order_by('published_datetime').reverse() context = {'user':user, @@ -30,7 +30,7 @@ def publish_task(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) is_guest = True if not user.is_authenticated() else False @@ -58,7 +58,7 @@ def view_task(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) if task.status == "DL": @@ -110,7 +110,7 @@ def create_task(request): if user cannot create a task, redirect to homepage. """ - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user is_guest = True if not user.is_authenticated() else False if not is_guest: @@ -152,7 +152,7 @@ def add_mentor(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) errors = [] @@ -192,7 +192,7 @@ def add_tasks(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) deps, subs = task.deps, task.subs @@ -252,7 +252,7 @@ def remove_task(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) is_guest = True if not user.is_authenticated() else False @@ -295,7 +295,7 @@ def claim_task(request, tid): errors = [] - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) claims = Claim.objects.filter(task=task) @@ -339,7 +339,7 @@ def rem_user(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) is_guest = True if not user.is_authenticated() else False @@ -384,7 +384,7 @@ def assign_task(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) is_guest = True if not user.is_authenticated() else False @@ -423,7 +423,7 @@ def assign_credits(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) is_guest = True if not user.is_authenticated() else False @@ -472,6 +472,8 @@ def edit_task(request, tid): """ task = Task.objects.get(id=tid) + user = get_user(request.user) if request.user.is_authenticated() else request.user + def complete_task(request, tid): @@ -481,7 +483,7 @@ def complete_task(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) is_guest = True if not user.is_authenticated() else False @@ -522,7 +524,7 @@ def close_task(request, tid): task_url = "/task/view/tid=%s"%tid - user = get_user(request.user) + user = get_user(request.user) if request.user.is_authenticated() else request.user task = getTask(tid) is_guest = True if not user.is_authenticated() else False diff --git a/taskapp/views/user.py b/taskapp/views/user.py index d3b2ee8..dddd2b2 100644 --- a/taskapp/views/user.py +++ b/taskapp/views/user.py @@ -10,9 +10,9 @@ from pytask.taskapp.models import Task, Profile, Request from pytask.taskapp.events.user import createUser, updateProfile from pytask.taskapp.events.request import reply_to_request -from pytask.taskapp.forms.user import UserProfileEditForm +from pytask.taskapp.forms.user import UserProfileEditForm, UserChoiceForm -from pytask.taskapp.utilities.request import get_request +from pytask.taskapp.utilities.request import get_request, create_request from pytask.taskapp.utilities.notification import get_notification from pytask.taskapp.utilities.user import get_user @@ -29,7 +29,7 @@ def show_msg(user, message, redirect_url=None, url_desc=None): def homepage(request): """ check for authentication and display accordingly. """ - user = get_user(request.user) + user = request.user is_guest = False is_mentor = False can_create_task = False @@ -47,6 +47,7 @@ def homepage(request): return render_to_response('index.html', {'user':user, 'is_guest':is_guest, 'task_list':task_list}) else: + user = get_user(request.user) user_profile = user.get_profile() is_mentor = True if user.task_mentors.all() else False can_create_task = False if user_profile.rights == u"CT" else True @@ -265,4 +266,60 @@ def edit_notification(request, nid, action): return redirect(notifications_url) else: return show_msg(user, 'This is wrong', notification_url, "view the notification") - + +@login_required +def change_rights(request, role): + """ check if the current user has privileges to do this. + """ + + user = get_user(request.user) + role = role.upper() + user_profile = user.get_profile() + user_rights = user_profile.rights + + user_can_view = True if user_rights == "AD" or ( user_rights == "MG" and role in ["mg", "dv"] ) else False + + if user_can_view: + if role == "DV": + choices = [ (_.user.id,_.user.username ) for _ in Profile.objects.filter(rights="CT",user__is_active=True) ] + elif role == "MG": + choices = [ (_.user.id,_.user.username ) for _ in Profile.objects.exclude(rights="MG",user__is_active=True).exclude(rights="AD") ] + elif role == "AD": + choices = [ (_.user.id,_.user.username ) for _ in Profile.objects.exclude(rights="AD",user__is_active=True) ] + + form = UserChoiceForm(choices) + + context = { + 'user':user, + 'form':form, + } + + if request.method=="POST": + data = request.POST + form = UserChoiceForm(choices, data) + if form.is_valid(): + user_to_change = User.objects.get(id=form.cleaned_data['user']) + create_request(sent_by=user, role=role, sent_to=user_to_change) + return show_msg(user, "A request has been sent", "/", "return to home page") + else: + raise Http404 + else: + return render_to_response('user/changerole.html', context) + else: + raise Http404 + + + + + + + + + + + + + + + + diff --git a/templates/index.html b/templates/index.html index 755ceef..58c1526 100644 --- a/templates/index.html +++ b/templates/index.html @@ -65,9 +65,9 @@ {% endfor %} {% endif %} <br /><br /> - {% ifnotequal user.get_profile.rights "CT" %} + {% if can_create_task %} <a href="/task/create/">Create a task</a><br /> - {% endifnotequal %} + {% endif %} {% ifequal user.get_profile.rights "MG" %} <a href="/user/make/dv/">Request another to be a Developer</a> <a href="/user/make/mg/">Request another user to act as manager</a><br /> diff --git a/templates/user/changerole.html b/templates/user/changerole.html new file mode 100644 index 0000000..3f7ecbd --- /dev/null +++ b/templates/user/changerole.html @@ -0,0 +1,11 @@ +{% extends 'base.html' %} +{% block title %} + {{task.title}} +{% endblock %} +{% block content %} + <a href="/">Click here</a> to return to home page.<br /> + <form action="" method="post"> + {{form.as_p}} + <input type="submit" value="Submit"> + </form> +{% endblock %} @@ -54,6 +54,7 @@ urlpatterns = patterns('', (r'^user/notifications/$', userViews.browse_notifications), (r'^user/notifications/nid=(\d+)/$', userViews.view_notification), (r'^user/notifications/nid=(\d+)/(\w+)/$', userViews.edit_notification), + (r'^user/make/(\w+)/$', userViews.change_rights), (r'^about/(\w+)/$', userViews.learn_more), |