annotate personasbackend/personas/views.py @ 130:694ff9b2474d

Added support for persona thumbnails.
author Atul Varma <varmaa@toolness.com>
date Wed, 02 Apr 2008 15:07:50 -0700
parents 3aff48d6beca
children 596ea5315b3a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
64
5f21f8d3334b Only users who have the personas.can_publish permission or who own a persona can edit them now; added more workflow logic. I'm not entirely happy with the way the workflow logic is structured right now, but this seems to work okay for the time being.
Atul Varma <varmaa@toolness.com>
parents: 63
diff changeset
1 from django.http import HttpResponseRedirect, HttpResponseForbidden
96
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
2 from django.http import HttpResponse, HttpResponseBadRequest
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
3 from django.template import RequestContext
31
ada72ce61fc2 Added a trivial login page.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
4 from django.contrib.auth.decorators import login_required
39
bd1cdb15ef85 Added persona form submission validation, fixed some things in model logic; submitting forms successfully now properly redirects the user to an edit page.
Atul Varma <varmaa@toolness.com>
parents: 38
diff changeset
5 from django.core.urlresolvers import reverse
42
6cde01f6012a Resolved a TODO involving get_object_or_404().
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
6 from django.shortcuts import render_to_response, get_object_or_404
31
ada72ce61fc2 Added a trivial login page.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
7
128
9bcc77e37c19 Renamed all references of PersonasBackend to personasbackend, matching PEP-8.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
8 from personasbackend.personas import models
9bcc77e37c19 Renamed all references of PersonasBackend to personasbackend, matching PEP-8.
Atul Varma <varmaa@toolness.com>
parents: 127
diff changeset
9 from personasbackend.personas import forms
20
ccb027c6862a Added simple JSON views that generate personas_categories.dat and personas_all.dat.
Atul Varma <varmaa@toolness.com>
parents: 2
diff changeset
10
96
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
11 def legacy_cbeard_persona( request, name ):
130
694ff9b2474d Added support for persona thumbnails.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
12 urldict = {"name" : name}
96
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
13
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
14 action = request.GET.get( "action", "" )
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
15
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
16 if action == "footer":
114
95ed7c25c065 Fixed the legacy persona wrapper so that it works properly on Firefox 2 (tested it out to make sure it works on FF2, and it does).
avarma@sm-labs01.mozilla.org
parents: 113
diff changeset
17 position = "bottom left"
130
694ff9b2474d Added support for persona thumbnails.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
18 img_src = models.LEGACY_FOOTER_URL % urldict
96
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
19 elif action == "header":
114
95ed7c25c065 Fixed the legacy persona wrapper so that it works properly on Firefox 2 (tested it out to make sure it works on FF2, and it does).
avarma@sm-labs01.mozilla.org
parents: 113
diff changeset
20 position = "top right"
130
694ff9b2474d Added support for persona thumbnails.
Atul Varma <varmaa@toolness.com>
parents: 129
diff changeset
21 img_src = models.LEGACY_HEADER_URL % urldict
96
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
22 else:
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
23 return HttpResponseBadRequest( "Invalid or unsupported action: %s" %
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
24 action )
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
25
113
8464f9b48e90 Moved the HTML wrapper code for legacy persona headers and footers out to template files.
avarma@sm-labs01.mozilla.org
parents: 112
diff changeset
26 return render_to_response(
114
95ed7c25c065 Fixed the legacy persona wrapper so that it works properly on Firefox 2 (tested it out to make sure it works on FF2, and it does).
avarma@sm-labs01.mozilla.org
parents: 113
diff changeset
27 "personas/legacy_persona.xul",
95ed7c25c065 Fixed the legacy persona wrapper so that it works properly on Firefox 2 (tested it out to make sure it works on FF2, and it does).
avarma@sm-labs01.mozilla.org
parents: 113
diff changeset
28 { "image" : img_src, "position" : position },
95ed7c25c065 Fixed the legacy persona wrapper so that it works properly on Firefox 2 (tested it out to make sure it works on FF2, and it does).
avarma@sm-labs01.mozilla.org
parents: 113
diff changeset
29 mimetype = "application/vnd.mozilla.xul+xml"
113
8464f9b48e90 Moved the HTML wrapper code for legacy persona headers and footers out to template files.
avarma@sm-labs01.mozilla.org
parents: 112
diff changeset
30 )
96
89c6f5ddaded Added a wrapper that wraps a legacy cbeard-style persona in the new dynamic persona API.
Atul Varma <varmaa@toolness.com>
parents: 77
diff changeset
31
129
3aff48d6beca Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
Atul Varma <varmaa@toolness.com>
parents: 128
diff changeset
32 def dynamic_persona_proxy( request, persona_id ):
3aff48d6beca Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
Atul Varma <varmaa@toolness.com>
parents: 128
diff changeset
33 # TODO: Deal with case where persona.url already has a querystring.
3aff48d6beca Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
Atul Varma <varmaa@toolness.com>
parents: 128
diff changeset
34 persona = models.Persona.objects.get( pk=int(persona_id) )
3aff48d6beca Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
Atul Varma <varmaa@toolness.com>
parents: 128
diff changeset
35 action = request.GET.get( "action", "" )
3aff48d6beca Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
Atul Varma <varmaa@toolness.com>
parents: 128
diff changeset
36 return HttpResponseRedirect( "%s?action=%s" % (persona.url,
3aff48d6beca Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
Atul Varma <varmaa@toolness.com>
parents: 128
diff changeset
37 action) )
3aff48d6beca Created a wrapper for dynamic personas, so that we can provide custom functionality for some dynamic persona methods to help ensure that a dynamic persona doesn't get overloaded/DOS'd.
Atul Varma <varmaa@toolness.com>
parents: 128
diff changeset
38
25
197b05fbd4cc Added a trivial list view.
Atul Varma <varmaa@toolness.com>
parents: 20
diff changeset
39 def list_view( request ):
67
029e3ad3cde0 Personas list view now only shows published personas. Admin personas index view now shows columns for status and date published to make approving recently-changed personas and other workflow tasks easier.
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
40 personas = models.Persona.objects.filter( status="published" )
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
41 return render_to_response(
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
42 "personas/list.html",
67
029e3ad3cde0 Personas list view now only shows published personas. Admin personas index view now shows columns for status and date published to make approving recently-changed personas and other workflow tasks easier.
Atul Varma <varmaa@toolness.com>
parents: 66
diff changeset
43 { "personas" : personas,
53
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
44 "title" : "Browse Personas" },
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
45 context_instance = RequestContext(request)
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
46 )
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
47
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
48 def home_view( request ):
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
49 return render_to_response(
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
50 "personas/home.html",
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
51 { "title" : "Home" },
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
52 context_instance = RequestContext(request)
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
53 )
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
54
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
55 def todo_view( request ):
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
56 return render_to_response(
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
57 "personas/todo.html",
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
58 { "title" : "Under Construction" },
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
59 context_instance = RequestContext(request)
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
60 )
37
ad477306dd51 A bit of refactoring to view logic.
Atul Varma <varmaa@toolness.com>
parents: 36
diff changeset
61
58
173d6fa4069f Added sections.py, which makes site navigation code simpler and more consistent.
Atul Varma <varmaa@toolness.com>
parents: 55
diff changeset
62 def new_view( request ):
173d6fa4069f Added sections.py, which makes site navigation code simpler and more consistent.
Atul Varma <varmaa@toolness.com>
parents: 55
diff changeset
63 return edit_view( request )
173d6fa4069f Added sections.py, which makes site navigation code simpler and more consistent.
Atul Varma <varmaa@toolness.com>
parents: 55
diff changeset
64
31
ada72ce61fc2 Added a trivial login page.
Atul Varma <varmaa@toolness.com>
parents: 27
diff changeset
65 @login_required
34
f83712466fe6 Added functionality to edit an existing persona, and a number of TODOs.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
66 def edit_view( request, persona_id=None ):
f83712466fe6 Added functionality to edit an existing persona, and a number of TODOs.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
67 if persona_id is None:
f83712466fe6 Added functionality to edit an existing persona, and a number of TODOs.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
68 persona = None
53
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
69 pageTitle = "Create a new Persona"
34
f83712466fe6 Added functionality to edit an existing persona, and a number of TODOs.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
70 else:
42
6cde01f6012a Resolved a TODO involving get_object_or_404().
Atul Varma <varmaa@toolness.com>
parents: 41
diff changeset
71 persona = get_object_or_404( models.Persona, id=persona_id )
64
5f21f8d3334b Only users who have the personas.can_publish permission or who own a persona can edit them now; added more workflow logic. I'm not entirely happy with the way the workflow logic is structured right now, but this seems to work okay for the time being.
Atul Varma <varmaa@toolness.com>
parents: 63
diff changeset
72 if not persona.can_user_edit( request.user ):
5f21f8d3334b Only users who have the personas.can_publish permission or who own a persona can edit them now; added more workflow logic. I'm not entirely happy with the way the workflow logic is structured right now, but this seems to work okay for the time being.
Atul Varma <varmaa@toolness.com>
parents: 63
diff changeset
73 return HttpResponseForbidden(
5f21f8d3334b Only users who have the personas.can_publish permission or who own a persona can edit them now; added more workflow logic. I'm not entirely happy with the way the workflow logic is structured right now, but this seems to work okay for the time being.
Atul Varma <varmaa@toolness.com>
parents: 63
diff changeset
74 "<h1>You do not have permission to edit "
5f21f8d3334b Only users who have the personas.can_publish permission or who own a persona can edit them now; added more workflow logic. I'm not entirely happy with the way the workflow logic is structured right now, but this seems to work okay for the time being.
Atul Varma <varmaa@toolness.com>
parents: 63
diff changeset
75 "this Persona.</h1>"
5f21f8d3334b Only users who have the personas.can_publish permission or who own a persona can edit them now; added more workflow logic. I'm not entirely happy with the way the workflow logic is structured right now, but this seems to work okay for the time being.
Atul Varma <varmaa@toolness.com>
parents: 63
diff changeset
76 )
53
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
77 pageTitle = "Edit Persona"
34
f83712466fe6 Added functionality to edit an existing persona, and a number of TODOs.
Atul Varma <varmaa@toolness.com>
parents: 33
diff changeset
78
33
2b5a8b3b8bef It's now possible for normal end-users to create new personas.
Atul Varma <varmaa@toolness.com>
parents: 31
diff changeset
79 if request.method == "POST":
98
305fb3a1e0ca Modified the personas app to take a single url to a persona, rather than two separate urls/two separate images.
Atul Varma <varmaa@toolness.com>
parents: 96
diff changeset
80 form = forms.PersonaForm( request.POST,
66
f26d149da41c Simplified some workflow; it's now assumed that all staff will use the admin interface, and only unprivileged users will use the standard persona form.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
81 instance=persona )
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
82 if form.is_valid():
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
83 newPersona = form.save( commit=False )
72
363e76475f5a 'updater' is no longer an editable field in the admin interface for Personas.
Atul Varma <varmaa@toolness.com>
parents: 67
diff changeset
84 newPersona.save( updater = request.user )
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
85 if persona is None:
77
ea612c730606 Creating or editing a persona also displays a message telling the user that the Persona will need to be reviewed by a staff member.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
86 msgText = ("Persona created successfully. It will need "
ea612c730606 Creating or editing a persona also displays a message telling the user that the Persona will need to be reviewed by a staff member.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
87 "to be reviewed by a staff member "
ea612c730606 Creating or editing a persona also displays a message telling the user that the Persona will need to be reviewed by a staff member.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
88 "before it is published.")
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
89 else:
77
ea612c730606 Creating or editing a persona also displays a message telling the user that the Persona will need to be reviewed by a staff member.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
90 msgText = ("Persona edited successfully. Your changes "
ea612c730606 Creating or editing a persona also displays a message telling the user that the Persona will need to be reviewed by a staff member.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
91 "will need to be approved by a staff member "
ea612c730606 Creating or editing a persona also displays a message telling the user that the Persona will need to be reviewed by a staff member.
Atul Varma <varmaa@toolness.com>
parents: 72
diff changeset
92 "before they can take effect.")
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
93 request.user.message_set.create( message = msgText )
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
94 url = reverse("edit-persona", args=[newPersona.id])
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
95 return HttpResponseRedirect( url )
33
2b5a8b3b8bef It's now possible for normal end-users to create new personas.
Atul Varma <varmaa@toolness.com>
parents: 31
diff changeset
96 else:
66
f26d149da41c Simplified some workflow; it's now assumed that all staff will use the admin interface, and only unprivileged users will use the standard persona form.
Atul Varma <varmaa@toolness.com>
parents: 64
diff changeset
97 form = forms.PersonaForm( instance=persona )
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
98
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
99 return render_to_response(
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
100 "personas/edit.html",
53
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
101 { "form" : form,
7a20574bedc8 Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents: 46
diff changeset
102 "title" : pageTitle },
40
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
103 context_instance = RequestContext(request)
748547f73357 Refactored some view logic and added messaging capabilities, so that the end-user is properly notified when persona creation/editing is successful.
Atul Varma <varmaa@toolness.com>
parents: 39
diff changeset
104 )