Mercurial > personas_backend
annotate PersonasBackend/personas/views.py @ 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.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Tue, 11 Mar 2008 22:38:54 -0500 |
parents | 363e76475f5a |
children | 89c6f5ddaded |
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 |
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
|
2 from django.template import RequestContext |
31
ada72ce61fc2
Added a trivial login page.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
3 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
|
4 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
|
5 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
|
6 |
20
ccb027c6862a
Added simple JSON views that generate personas_categories.dat and personas_all.dat.
Atul Varma <varmaa@toolness.com>
parents:
2
diff
changeset
|
7 from PersonasBackend.personas import models |
27
4439a83c5dc6
Added a trivial new/edit form using the django.newforms system.
Atul Varma <varmaa@toolness.com>
parents:
25
diff
changeset
|
8 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
|
9 |
25 | 10 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
|
11 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
|
12 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
|
13 "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
|
14 { "personas" : personas, |
53
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
15 "title" : "Browse Personas" }, |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
16 context_instance = RequestContext(request) |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
17 ) |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
18 |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
19 def home_view( request ): |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
20 return render_to_response( |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
21 "personas/home.html", |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
22 { "title" : "Home" }, |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
23 context_instance = RequestContext(request) |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
24 ) |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
25 |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
26 def todo_view( request ): |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
27 return render_to_response( |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
28 "personas/todo.html", |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
29 { "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
|
30 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
|
31 ) |
37
ad477306dd51
A bit of refactoring to view logic.
Atul Varma <varmaa@toolness.com>
parents:
36
diff
changeset
|
32 |
55 | 33 def _rename_file( filedict, persona=None ): |
34 """ | |
35 Attempts to find a better name for an uploaded persona image | |
36 represented by the given HttpRequest file info dictionary and an | |
37 optional models.Persona object. | |
38 | |
39 Uploaded files are named by the submitter, and could have names | |
40 that are completely meaningless to us, so we want to try to rename | |
41 them to something that makes more sense to us. | |
42 """ | |
43 | |
41
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
44 import os |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
45 import time |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
46 |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
47 # TODO: This feels hacky. It might be cleaner to just rename the |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
48 # file after the commit is made or something. |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
49 |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
50 origExt = os.path.splitext( filedict["filename"] )[1] |
55 | 51 |
52 # TODO: Normalize/validate origExt somehow? | |
53 | |
41
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
54 if persona: |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
55 filename = "persona_%d_rev_%d%s" % ( |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
56 persona.id, |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
57 persona.revision + 1, |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
58 origExt |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
59 ) |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
60 else: |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
61 filename = "new_persona_%Y_%m_%d_%H_%M_%S" + origExt |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
62 filename = time.strftime( filename ) |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
63 filedict["filename"] = filename |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
64 |
58
173d6fa4069f
Added sections.py, which makes site navigation code simpler and more consistent.
Atul Varma <varmaa@toolness.com>
parents:
55
diff
changeset
|
65 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
|
66 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
|
67 |
31
ada72ce61fc2
Added a trivial login page.
Atul Varma <varmaa@toolness.com>
parents:
27
diff
changeset
|
68 @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
|
69 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
|
70 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
|
71 persona = None |
53
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
72 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
|
73 else: |
42
6cde01f6012a
Resolved a TODO involving get_object_or_404().
Atul Varma <varmaa@toolness.com>
parents:
41
diff
changeset
|
74 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
|
75 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
|
76 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
|
77 "<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
|
78 "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
|
79 ) |
53
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
80 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
|
81 |
33
2b5a8b3b8bef
It's now possible for normal end-users to create new personas.
Atul Varma <varmaa@toolness.com>
parents:
31
diff
changeset
|
82 if request.method == "POST": |
41
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
83 for img_name in request.FILES: |
ced361f3d90b
Uploading of header/footer images now works.
Atul Varma <varmaa@toolness.com>
parents:
40
diff
changeset
|
84 _rename_file( request.FILES[img_name], persona ) |
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
|
85 form = forms.PersonaForm( request.POST, request.FILES, |
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
|
86 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
|
87 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
|
88 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
|
89 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
|
90 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
|
91 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
|
92 "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
|
93 "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
|
94 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
|
95 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
|
96 "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
|
97 "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
|
98 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
|
99 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
|
100 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
|
101 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
|
102 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
|
103 |
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 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
|
105 "personas/edit.html", |
53
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
106 { "form" : form, |
7a20574bedc8
Made templates more robust, fixed broken links, etc.
Atul Varma <varmaa@toolness.com>
parents:
46
diff
changeset
|
107 "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
|
108 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
|
109 ) |