Mercurial > p > roundup > code
annotate doc/customizing.txt @ 7352:f3c9ba5db30b
split reference out from customizing and fix all links.
also reformat a couple of lists.
Still to do verify that references to customizing.txt from the rest of
the docs should still point there.
| author | John Rouillard <rouilj@ieee.org> |
|---|---|
| date | Tue, 16 May 2023 00:56:00 -0400 |
| parents | bee24b37a90f |
| children | 2b1cbe079ff5 |
| rev | line source |
|---|---|
|
6586
24e2eeb2ed9a
Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents:
6583
diff
changeset
|
1 .. meta:: |
|
6774
e7b4ad2c57ac
landmarks, skiplink, remove bad attrs, autocomplete search
John Rouillard <rouilj@ieee.org>
parents:
6752
diff
changeset
|
2 :description: |
|
6586
24e2eeb2ed9a
Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents:
6583
diff
changeset
|
3 How to customize and extend the Roundup Issue |
|
24e2eeb2ed9a
Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents:
6583
diff
changeset
|
4 Tracker. Includes many cookbook and how-to |
|
24e2eeb2ed9a
Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents:
6583
diff
changeset
|
5 examples. Reference for the design and internals |
|
24e2eeb2ed9a
Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents:
6583
diff
changeset
|
6 needed to understand and extend the examples to meet |
|
24e2eeb2ed9a
Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents:
6583
diff
changeset
|
7 new needs. |
|
24e2eeb2ed9a
Add meta description to some doc pages.
John Rouillard <rouilj@ieee.org>
parents:
6583
diff
changeset
|
8 |
|
4033
bca7c59ac400
Enhance documentation generation.
Stefan Seefeld <stefan@seefeld.name>
parents:
3968
diff
changeset
|
9 :tocdepth: 2 |
|
bca7c59ac400
Enhance documentation generation.
Stefan Seefeld <stefan@seefeld.name>
parents:
3968
diff
changeset
|
10 |
|
1215
f83efa574177
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1214
diff
changeset
|
11 =================== |
|
659
e429649ed124
More documentation cleanups.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
12 Customising Roundup |
|
e429649ed124
More documentation cleanups.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
13 =================== |
|
e429649ed124
More documentation cleanups.
Richard Jones <richard@users.sourceforge.net>
parents:
diff
changeset
|
14 |
|
1070
af0abadfda3a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1058
diff
changeset
|
15 .. This document borrows from the ZopeBook section on ZPT. The original is at: |
|
af0abadfda3a
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1058
diff
changeset
|
16 http://www.zope.org/Documentation/Books/ZopeBook/current/ZPT.stx |
|
686
c52122f38c9b
Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents:
684
diff
changeset
|
17 |
|
c52122f38c9b
Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents:
684
diff
changeset
|
18 .. contents:: |
|
4888
b07014d6a7aa
docs: Fix table of contents on customizing page
anatoly techtonik <techtonik@gmail.com>
parents:
4880
diff
changeset
|
19 :depth: 2 |
|
b07014d6a7aa
docs: Fix table of contents on customizing page
anatoly techtonik <techtonik@gmail.com>
parents:
4880
diff
changeset
|
20 :local: |
|
686
c52122f38c9b
Documentation cleanup, added info for potential (and current) developers
Richard Jones <richard@users.sourceforge.net>
parents:
684
diff
changeset
|
21 |
|
898
5ffac75a7f2e
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
798
diff
changeset
|
22 What You Can Do |
| 1098 | 23 =============== |
|
898
5ffac75a7f2e
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
798
diff
changeset
|
24 |
|
1244
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1236
diff
changeset
|
25 Before you get too far, it's probably worth having a quick read of the Roundup |
|
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1236
diff
changeset
|
26 `design documentation`_. |
|
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1236
diff
changeset
|
27 |
|
1850
6e80f8f760a4
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
1832
diff
changeset
|
28 Customisation of Roundup can take one of six forms: |
|
898
5ffac75a7f2e
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
798
diff
changeset
|
29 |
|
7352
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
30 1. `tracker configuration <reference.html#tracker-configuration>`_ changes |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
31 2. database, or `tracker schema <reference.html#tracker-schema>`_ changes |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
32 3. "definition" class `database content <reference.html#database-content>`_ changes |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
33 4. behavioural changes through `detectors <reference.html#detectors>`_, |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
34 `extensions <reference.html#extensions>`_ and |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
35 `interfaces.py <reference.html#interfaces-py>`_ |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
36 5. `security / access controls <reference.html#security-access-controls>`_ |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
37 6. change the `web interface <reference.html#web-interface>`_ |
|
898
5ffac75a7f2e
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
798
diff
changeset
|
38 |
|
5ffac75a7f2e
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
798
diff
changeset
|
39 The third case is special because it takes two distinctly different forms |
|
1089
43ab730ee194
instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents:
1083
diff
changeset
|
40 depending upon whether the tracker has been initialised or not. The other two |
|
43ab730ee194
instance -> tracker, node -> item
Richard Jones <richard@users.sourceforge.net>
parents:
1083
diff
changeset
|
41 may be done at any time, before or after tracker initialisation. Yes, this |
|
898
5ffac75a7f2e
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
798
diff
changeset
|
42 includes adding or removing properties from classes. |
|
5ffac75a7f2e
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
798
diff
changeset
|
43 |
| 6163 | 44 .. _CustomExamples: |
| 2910 | 45 |
| 1100 | 46 Examples |
| 47 ======== | |
| 48 | |
|
1244
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1236
diff
changeset
|
49 .. contents:: |
|
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1236
diff
changeset
|
50 :local: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
51 :depth: 2 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
52 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
53 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
54 Changing what's stored in the database |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
55 -------------------------------------- |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
56 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
57 The following examples illustrate ways to change the information stored in |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
58 the database. |
|
1244
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1236
diff
changeset
|
59 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
60 |
| 1228 | 61 Adding a new field to the classic schema |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
62 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 1100 | 63 |
| 3122 | 64 This example shows how to add a simple field (a due date) to the default |
| 65 classic schema. It does not add any additional behaviour, such as enforcing | |
| 66 the due date, or causing automatic actions to fire if the due date passes. | |
| 67 | |
|
3409
80dc8011228e
mention schema mutation
Richard Jones <richard@users.sourceforge.net>
parents:
3404
diff
changeset
|
68 You add new fields by editing the ``schema.py`` file in you tracker's home. |
|
80dc8011228e
mention schema mutation
Richard Jones <richard@users.sourceforge.net>
parents:
3404
diff
changeset
|
69 Schema changes are automatically applied to the database on the next |
|
80dc8011228e
mention schema mutation
Richard Jones <richard@users.sourceforge.net>
parents:
3404
diff
changeset
|
70 tracker access (note that roundup-server would need to be restarted as it |
|
80dc8011228e
mention schema mutation
Richard Jones <richard@users.sourceforge.net>
parents:
3404
diff
changeset
|
71 caches the schema). |
| 3122 | 72 |
| 6163 | 73 .. index:: schema; example changes |
| 74 | |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
75 1. Modify the ``schema.py``:: |
| 3122 | 76 |
| 77 issue = IssueClass(db, "issue", | |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
78 assignedto=Link("user"), keyword=Multilink("keyword"), |
| 3122 | 79 priority=Link("priority"), status=Link("status"), |
|
3127
021b131bd816
doc fixes, one more fix to the permissions-in-listings fix
Richard Jones <richard@users.sourceforge.net>
parents:
3126
diff
changeset
|
80 due_date=Date()) |
| 3122 | 81 |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
82 2. Add an edit field to the ``issue.item.html`` template:: |
| 3122 | 83 |
| 84 <tr> | |
| 85 <th>Due Date</th> | |
| 86 <td tal:content="structure context/due_date/field" /> | |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
87 </tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
88 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
89 If you want to show only the date part of due_date then do this instead:: |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
90 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
91 <tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
92 <th>Due Date</th> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
93 <td tal:content="structure python:context.due_date.field(format='%Y-%m-%d')" /> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
94 </tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
95 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
96 3. Add the property to the ``issue.index.html`` page:: |
| 3122 | 97 |
|
3123
5894c7bea8ce
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3122
diff
changeset
|
98 (in the heading row) |
|
5894c7bea8ce
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3122
diff
changeset
|
99 <th tal:condition="request/show/due_date">Due Date</th> |
|
5894c7bea8ce
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
3122
diff
changeset
|
100 (in the data row) |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
101 <td tal:condition="request/show/due_date" |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
102 tal:content="i/due_date" /> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
103 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
104 If you want format control of the display of the due date you can |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
105 enter the following in the data row to show only the actual due date:: |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
106 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
107 <td tal:condition="request/show/due_date" |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
108 tal:content="python:i.due_date.pretty('%Y-%m-%d')"> </td> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
109 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
110 4. Add the property to the ``issue.search.html`` page:: |
| 3122 | 111 |
| 112 <tr tal:define="name string:due_date"> | |
| 113 <th i18n:translate="">Due Date:</th> | |
| 114 <td metal:use-macro="search_input"></td> | |
| 115 <td metal:use-macro="column_input"></td> | |
| 116 <td metal:use-macro="sort_input"></td> | |
| 117 <td metal:use-macro="group_input"></td> | |
| 118 </tr> | |
| 119 | |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
120 5. If you wish for the due date to appear in the standard views listed |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
121 in the sidebar of the web interface then you'll need to add "due_date" |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
122 to the columns and columns_showall lists in your ``page.html``:: |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
123 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
124 columns string:id,activity,due_date,title,creator,status; |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
125 columns_showall string:id,activity,due_date,title,creator,assignedto,status; |
| 3122 | 126 |
| 127 Adding a new constrained field to the classic schema | |
| 128 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 129 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
130 This example shows how to add a new constrained property (i.e. a |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
131 selection of distinct values) to your tracker. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
132 |
| 1098 | 133 |
| 134 Introduction | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
135 :::::::::::: |
| 1098 | 136 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
137 To make the classic schema of Roundup useful as a TODO tracking system |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
138 for a group of systems administrators, it needs an extra data field per |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
139 issue: a category. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
140 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
141 This would let sysadmins quickly list all TODOs in their particular area |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
142 of interest without having to do complex queries, and without relying on |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
143 the spelling capabilities of other sysadmins (a losing proposition at |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
144 best). |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
145 |
| 1098 | 146 |
| 147 Adding a field to the database | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
148 :::::::::::::::::::::::::::::: |
| 1098 | 149 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
150 This is the easiest part of the change. The category would just be a |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
151 plain string, nothing fancy. To change what is in the database you need |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
152 to add some lines to the ``schema.py`` file of your tracker instance. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
153 Under the comment:: |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
154 |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
155 # add any additional database schema configuration here |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
156 |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
157 add:: |
| 1098 | 158 |
| 159 category = Class(db, "category", name=String()) | |
| 160 category.setkey("name") | |
| 161 | |
| 162 Here we are setting up a chunk of the database which we are calling | |
| 163 "category". It contains a string, which we are refering to as "name" for | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
164 lack of a more imaginative title. (Since "name" is one of the properties |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
165 that Roundup looks for on items if you do not set a key for them, it's |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
166 probably a good idea to stick with it for new classes if at all |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
167 appropriate.) Then we are setting the key of this chunk of the database |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
168 to be that "name". This is equivalent to an index for database types. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
169 This also means that there can only be one category with a given name. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
170 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
171 Adding the above lines allows us to create categories, but they're not |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
172 tied to the issues that we are going to be creating. It's just a list of |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
173 categories off on its own, which isn't much use. We need to link it in |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
174 with the issues. To do that, find the lines |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2958
diff
changeset
|
175 in ``schema.py`` which set up the "issue" class, and then add a link to |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
176 the category:: |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
177 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
178 issue = IssueClass(db, "issue", ... , |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
179 category=Multilink("category"), ... ) |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
180 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
181 The ``Multilink()`` means that each issue can have many categories. If |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
182 you were adding something with a one-to-one relationship to issues (such |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
183 as the "assignedto" property), use ``Link()`` instead. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
184 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
185 That is all you need to do to change the schema. The rest of the effort |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
186 is fiddling around so you can actually use the new category. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
187 |
| 1098 | 188 |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
189 Populating the new category class |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
190 ::::::::::::::::::::::::::::::::: |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
191 |
|
6174
5522c950a2e4
Add indexing for roundup-admin references.
John Rouillard <rouilj@ieee.org>
parents:
6171
diff
changeset
|
192 If you haven't initialised the database with the |
|
5522c950a2e4
Add indexing for roundup-admin references.
John Rouillard <rouilj@ieee.org>
parents:
6171
diff
changeset
|
193 "``roundup-admin initialise``" command, then you |
|
5522c950a2e4
Add indexing for roundup-admin references.
John Rouillard <rouilj@ieee.org>
parents:
6171
diff
changeset
|
194 can add the following to the tracker ``initial_data.py`` |
|
5522c950a2e4
Add indexing for roundup-admin references.
John Rouillard <rouilj@ieee.org>
parents:
6171
diff
changeset
|
195 under the comment:: |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
196 |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
197 # add any additional database creation steps here - but only if you |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
198 # haven't initialised the database with the admin "initialise" command |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
199 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
200 Add:: |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
201 |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
202 category = db.getclass('category') |
|
3582
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
203 category.create(name="scipy") |
|
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
204 category.create(name="chaco") |
|
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
205 category.create(name="weave") |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
206 |
|
6174
5522c950a2e4
Add indexing for roundup-admin references.
John Rouillard <rouilj@ieee.org>
parents:
6171
diff
changeset
|
207 .. index:: roundup-admin; create entries in class |
|
5522c950a2e4
Add indexing for roundup-admin references.
John Rouillard <rouilj@ieee.org>
parents:
6171
diff
changeset
|
208 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
209 If the database has already been initalised, then you need to use the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
210 ``roundup-admin`` tool:: |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
211 |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
212 % roundup-admin -i <tracker home> |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
213 Roundup <version> ready for input. |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
214 Type "help" for help. |
|
3582
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
215 roundup> create category name=scipy |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
216 1 |
|
3582
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
217 roundup> create category name=chaco |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
218 2 |
|
3582
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
219 roundup> create category name=weave |
|
1235
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
220 3 |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
221 roundup> exit... |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
222 There are unsaved changes. Commit them (y/N)? y |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
223 |
|
7441653e5330
added hook for external password validation, and some more docco
Richard Jones <richard@users.sourceforge.net>
parents:
1234
diff
changeset
|
224 |
| 1098 | 225 Setting up security on the new objects |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
226 :::::::::::::::::::::::::::::::::::::: |
| 1098 | 227 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
228 By default only the admin user can look at and change objects. This |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
229 doesn't suit us, as we want any user to be able to create new categories |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
230 as required, and obviously everyone needs to be able to view the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
231 categories of issues for it to be useful. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
232 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
233 We therefore need to change the security of the category objects. This |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
234 is also done in ``schema.py``. |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
235 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
236 There are currently two loops which set up permissions and then assign |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
237 them to various roles. Simply add the new "category" to both lists:: |
| 1098 | 238 |
| 239 # Assign the access and edit permissions for issue, file and message | |
| 240 # to regular users now | |
| 241 for cl in 'issue', 'file', 'msg', 'category': | |
| 242 p = db.security.getPermission('View', cl) | |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
243 db.security.addPermissionToRole('User', 'View', cl) |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
244 db.security.addPermissionToRole('User', 'Edit', cl) |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
245 db.security.addPermissionToRole('User', 'Create', cl) |
| 1098 | 246 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
247 These lines assign the "View" and "Edit" Permissions to the "User" role, |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
248 so that normal users can view and edit "category" objects. |
| 1098 | 249 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
250 This is all the work that needs to be done for the database. It will |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
251 store categories, and let users view and edit them. Now on to the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
252 interface stuff. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
253 |
| 1098 | 254 |
| 255 Changing the web left hand frame | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
256 :::::::::::::::::::::::::::::::: |
| 1098 | 257 |
| 258 We need to give the users the ability to create new categories, and the | |
| 259 place to put the link to this functionality is in the left hand function | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
260 bar, under the "Issues" area. The file that defines how this area looks |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
261 is ``html/page.html``, which is what we are going to be editing next. |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
262 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
263 If you look at this file you can see that it contains a lot of |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
264 "classblock" sections which are chunks of HTML that will be included or |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
265 excluded in the output depending on whether the condition in the |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
266 classblock is met. We are going to add the category code at the end of |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
267 the classblock for the *issue* class:: |
| 1098 | 268 |
| 269 <p class="classblock" | |
| 270 tal:condition="python:request.user.hasPermission('View', 'category')"> | |
| 271 <b>Categories</b><br> | |
| 272 <a tal:condition="python:request.user.hasPermission('Edit', 'category')" | |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
273 href="category?@template=item">New Category<br></a> |
| 1098 | 274 </p> |
| 275 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
276 The first two lines is the classblock definition, which sets up a |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
277 condition that only users who have "View" permission for the "category" |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
278 object will have this section included in their output. Next comes a |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
279 plain "Categories" header in bold. Everyone who can view categories will |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
280 get that. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
281 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
282 Next comes the link to the editing area of categories. This link will |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
283 only appear if the condition - that the user has "Edit" permissions for |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
284 the "category" objects - is matched. If they do have permission then |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
285 they will get a link to another page which will let the user add new |
| 1098 | 286 categories. |
| 287 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
288 Note that if you have permission to *view* but not to *edit* categories, |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
289 then all you will see is a "Categories" header with nothing underneath |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
290 it. This is obviously not very good interface design, but will do for |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
291 now. I just claim that it is so I can add more links in this section |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
292 later on. However, to fix the problem you could change the condition in |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
293 the classblock statement, so that only users with "Edit" permission |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
294 would see the "Categories" stuff. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
295 |
| 1098 | 296 |
| 297 Setting up a page to edit categories | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
298 :::::::::::::::::::::::::::::::::::: |
| 1098 | 299 |
| 300 We defined code in the previous section which let users with the | |
| 301 appropriate permissions see a link to a page which would let them edit | |
| 302 conditions. Now we have to write that page. | |
| 303 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
304 The link was for the *item* template of the *category* object. This |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
305 translates into Roundup looking for a file called ``category.item.html`` |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
306 in the ``html`` tracker directory. This is the file that we are going to |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
307 write now. |
| 1098 | 308 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
309 First, we add an info tag in a comment which doesn't affect the outcome |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
310 of the code at all, but is useful for debugging. If you load a page in a |
| 1098 | 311 browser and look at the page source, you can see which sections come |
| 312 from which files by looking for these comments:: | |
| 313 | |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
314 <!-- category.item --> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
315 |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
316 Next we need to add in the METAL macro stuff so we get the normal page |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
317 trappings:: |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
318 |
| 1214 | 319 <tal:block metal:use-macro="templates/page/macros/icing"> |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
320 <title metal:fill-slot="head_title">Category editing</title> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
321 <td class="page-header-top" metal:fill-slot="body_title"> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
322 <h2>Category editing</h2> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
323 </td> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
324 <td class="content" metal:fill-slot="content"> |
| 1098 | 325 |
| 326 Next we need to setup up a standard HTML form, which is the whole | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
327 purpose of this file. We link to some handy javascript which sends the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
328 form through only once. This is to stop users hitting the send button |
| 1098 | 329 multiple times when they are impatient and thus having the form sent |
| 330 multiple times:: | |
| 331 | |
| 332 <form method="POST" onSubmit="return submit_once()" | |
| 333 enctype="multipart/form-data"> | |
| 334 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
335 Next we define some code which sets up the minimum list of fields that |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
336 we require the user to enter. There will be only one field - "name" - so |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
337 they better put something in it, otherwise the whole form is pointless:: |
| 1098 | 338 |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
339 <input type="hidden" name="@required" value="name"> |
| 1098 | 340 |
| 341 To get everything to line up properly we will put everything in a table, | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
342 and put a nice big header on it so the user has an idea what is |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
343 happening:: |
| 1098 | 344 |
| 345 <table class="form"> | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
346 <tr><th class="header" colspan="2">Category</th></tr> |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
347 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
348 Next, we need the field into which the user is going to enter the new |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
349 category. The ``context.name.field(size=60)`` bit tells Roundup to |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
350 generate a normal HTML field of size 60, and the contents of that field |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
351 will be the "name" variable of the current context (namely "category"). |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
352 The upshot of this is that when the user types something in |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
353 to the form, a new category will be created with that name:: |
| 1098 | 354 |
| 355 <tr> | |
|
1825
fad32dafc174
Replaced all uses of the 'nowrap' attribute with its CSS equivalent:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1817
diff
changeset
|
356 <th>Name</th> |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
357 <td tal:content="structure python:context.name.field(size=60)"> |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
358 name</td> |
| 1098 | 359 </tr> |
| 360 | |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
361 Then a submit button so that the user can submit the new category:: |
| 1098 | 362 |
| 363 <tr> | |
| 364 <td> </td> | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
365 <td colspan="3" tal:content="structure context/submit"> |
| 1098 | 366 submit button will go here |
| 367 </td> | |
| 368 </tr> | |
| 369 | |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
370 The ``context/submit`` bit generates the submit button but also |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
371 generates the @action and @csrf hidden fields. The @action field is |
|
7268
91125d474c1e
doc updates, normalize roundup => Roundup, add links, typo fixes
John Rouillard <rouilj@ieee.org>
parents:
7267
diff
changeset
|
372 used to tell Roundup how to process the form. The @csrf field provides |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
373 a unique single use token to defend against CSRF attacks. (More about |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
374 anti-csrf measures can be found in ``upgrading.txt``.) |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
375 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
376 Finally we finish off the tags we used at the start to do the METAL |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
377 stuff:: |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
378 |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
379 </td> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
380 </tal:block> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
381 |
| 1098 | 382 So putting it all together, and closing the table and form we get:: |
| 383 | |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
384 <!-- category.item --> |
| 1214 | 385 <tal:block metal:use-macro="templates/page/macros/icing"> |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
386 <title metal:fill-slot="head_title">Category editing</title> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
387 <td class="page-header-top" metal:fill-slot="body_title"> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
388 <h2>Category editing</h2> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
389 </td> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
390 <td class="content" metal:fill-slot="content"> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
391 <form method="POST" onSubmit="return submit_once()" |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
392 enctype="multipart/form-data"> |
| 1098 | 393 |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
394 <table class="form"> |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
395 <tr><th class="header" colspan="2">Category</th></tr> |
| 1098 | 396 |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
397 <tr> |
|
1825
fad32dafc174
Replaced all uses of the 'nowrap' attribute with its CSS equivalent:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1817
diff
changeset
|
398 <th>Name</th> |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
399 <td tal:content="structure python:context.name.field(size=60)"> |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
400 name</td> |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
401 </tr> |
| 1098 | 402 |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
403 <tr> |
|
1829
4e4afbe3cd30
Move '<input type="hidden">' elements into a block.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1825
diff
changeset
|
404 <td> |
|
4e4afbe3cd30
Move '<input type="hidden">' elements into a block.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1825
diff
changeset
|
405 |
|
4e4afbe3cd30
Move '<input type="hidden">' elements into a block.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1825
diff
changeset
|
406 <input type="hidden" name="@required" value="name"> |
|
4e4afbe3cd30
Move '<input type="hidden">' elements into a block.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1825
diff
changeset
|
407 </td> |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
408 <td colspan="3" tal:content="structure context/submit"> |
|
1213
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
409 submit button will go here |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
410 </td> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
411 </tr> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
412 </table> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
413 </form> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
414 </td> |
|
3a5e05edcd87
added doc for METAL
Richard Jones <richard@users.sourceforge.net>
parents:
1164
diff
changeset
|
415 </tal:block> |
| 1098 | 416 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
417 This is quite a lot to just ask the user one simple question, but there |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
418 is a lot of setup for basically one line (the form line) to do its work. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
419 To add another field to "category" would involve one more line (well, |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
420 maybe a few extra to get the formatting correct). |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
421 |
| 1098 | 422 |
| 423 Adding the category to the issue | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
424 :::::::::::::::::::::::::::::::: |
| 1098 | 425 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
426 We now have the ability to create issues to our heart's content, but |
| 1098 | 427 that is pointless unless we can assign categories to issues. Just like |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
428 the ``html/category.item.html`` file was used to define how to add a new |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
429 category, the ``html/issue.item.html`` is used to define how a new issue |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
430 is created. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
431 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
432 Just like ``category.issue.html``, this file defines a form which has a |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
433 table to lay things out. It doesn't matter where in the table we add new |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
434 stuff, it is entirely up to your sense of aesthetics:: |
| 1098 | 435 |
|
1825
fad32dafc174
Replaced all uses of the 'nowrap' attribute with its CSS equivalent:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1817
diff
changeset
|
436 <th>Category</th> |
|
3582
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
437 <td> |
|
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
438 <span tal:replace="structure context/category/field" /> |
|
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
439 <span tal:replace="structure python:db.category.classhelp('name', |
|
026adc5f1e13
fix "Adding a new constrained field to the classic schema" example in docs
Richard Jones <richard@users.sourceforge.net>
parents:
3580
diff
changeset
|
440 property='category', width='200')" /> |
| 1098 | 441 </td> |
| 442 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
443 First, we define a nice header so that the user knows what the next |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
444 section is, then the middle line does what we are most interested in. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
445 This ``context/category/field`` gets replaced by a field which contains |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
446 the category in the current context (the current context being the new |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
447 issue). |
| 1098 | 448 |
| 449 The classhelp lines generate a link (labelled "list") to a popup window | |
| 450 which contains the list of currently known categories. | |
| 451 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
452 |
| 1098 | 453 Searching on categories |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
454 ::::::::::::::::::::::: |
| 1098 | 455 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
456 Now we can add categories, and create issues with categories. The next |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
457 obvious thing that we would like to be able to do, would be to search |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
458 for issues based on their category, so that, for example, anyone working |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
459 on the web server could look at all issues in the category "Web". |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
460 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
461 If you look for "Search Issues" in the ``html/page.html`` file, you will |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
462 find that it looks something like |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
463 ``<a href="issue?@template=search">Search Issues</a>``. This shows us |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
464 that when you click on "Search Issues" it will be looking for a |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
465 ``issue.search.html`` file to display. So that is the file that we will |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
466 change. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
467 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
468 If you look at this file it should begin to seem familiar, although it |
|
1730
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
469 does use some new macros. You can add the new category search code anywhere you |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
470 like within that form:: |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
471 |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
472 <tr tal:define="name string:category; |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
473 db_klass string:category; |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
474 db_content string:name;"> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
475 <th>Priority:</th> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
476 <td metal:use-macro="search_select"></td> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
477 <td metal:use-macro="column_input"></td> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
478 <td metal:use-macro="sort_input"></td> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
479 <td metal:use-macro="group_input"></td> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
480 </tr> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
481 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
482 The definitions in the ``<tr>`` opening tag are used by the macros: |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
483 |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
484 - ``search_select`` expands to a drop-down box with all categories using |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
485 ``db_klass`` and ``db_content``. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
486 - ``column_input`` expands to a checkbox for selecting what columns |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
487 should be displayed. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
488 - ``sort_input`` expands to a radio button for selecting what property |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
489 should be sorted on. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
490 - ``group_input`` expands to a radio button for selecting what property |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
491 should be grouped on. |
|
1730
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
492 |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
493 The category search code above would expand to the following:: |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
494 |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
495 <tr> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
496 <th>Category:</th> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
497 <td> |
| 1098 | 498 <select name="category"> |
|
1730
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
499 <option value="">don't care</option> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
500 <option value="">------------</option> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
501 <option value="1">scipy</option> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
502 <option value="2">chaco</option> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
503 <option value="3">weave</option> |
| 1098 | 504 </select> |
|
1730
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
505 </td> |
|
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
506 <td><input type="checkbox" name=":columns" value="category"></td> |
|
3696
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3688
diff
changeset
|
507 <td><input type="radio" name=":sort0" value="category"></td> |
|
790363e96852
Sorting/grouping by multiple properties.
Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net>
parents:
3688
diff
changeset
|
508 <td><input type="radio" name=":group0" value="category"></td> |
|
1730
2dd6b4c825e9
Final touches to fix query editing. It should work now.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1711
diff
changeset
|
509 </tr> |
| 1098 | 510 |
| 511 Adding category to the default view | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
512 ::::::::::::::::::::::::::::::::::: |
| 1098 | 513 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
514 We can now add categories, add issues with categories, and search for |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
515 issues based on categories. This is everything that we need to do; |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
516 however, there is some more icing that we would like. I think the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
517 category of an issue is important enough that it should be displayed by |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
518 default when listing all the issues. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
519 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
520 Unfortunately, this is a bit less obvious than the previous steps. The |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
521 code defining how the issues look is in ``html/issue.index.html``. This |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
522 is a large table with a form down at the bottom for redisplaying and so |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
523 forth. |
| 1098 | 524 |
| 525 Firstly we need to add an appropriate header to the start of the table:: | |
| 526 | |
| 527 <th tal:condition="request/show/category">Category</th> | |
| 528 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
529 The *condition* part of this statement is to avoid displaying the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
530 Category column if the user has selected not to see it. |
| 1098 | 531 |
| 532 The rest of the table is a loop which will go through every issue that | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
533 matches the display criteria. The loop variable is "i" - which means |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
534 that every issue gets assigned to "i" in turn. |
| 1098 | 535 |
| 536 The new part of code to display the category will look like this:: | |
| 537 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
538 <td tal:condition="request/show/category" |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
539 tal:content="i/category"></td> |
| 1098 | 540 |
| 541 The condition is the same as above: only display the condition when the | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
542 user hasn't asked for it to be hidden. The next part is to set the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
543 content of the cell to be the category part of "i" - the current issue. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
544 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
545 Finally we have to edit ``html/page.html`` again. This time, we need to |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
546 tell it that when the user clicks on "Unassigned Issues" or "All Issues", |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
547 the category column should be included in the resulting list. If you |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
548 scroll down the page file, you can see the links with lots of options. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
549 The option that we are interested in is the ``:columns=`` one which |
|
7268
91125d474c1e
doc updates, normalize roundup => Roundup, add links, typo fixes
John Rouillard <rouilj@ieee.org>
parents:
7267
diff
changeset
|
550 tells Roundup which fields of the issue to display. Simply add |
| 1098 | 551 "category" to that list and it all should work. |
| 552 | |
| 1262 | 553 Adding a time log to your issues |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
554 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| 1262 | 555 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
556 We want to log the dates and amount of time spent working on issues, and |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
557 be able to give a summary of the total time spent on a particular issue. |
| 1262 | 558 |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2958
diff
changeset
|
559 1. Add a new class to your tracker ``schema.py``:: |
| 1262 | 560 |
| 561 # storage for time logging | |
| 562 timelog = Class(db, "timelog", period=Interval()) | |
| 563 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
564 Note that we automatically get the date of the time log entry |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
565 creation through the standard property "creation". |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
566 |
|
3652
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
567 You will need to grant "Creation" permission to the users who are |
| 3653 | 568 allowed to add timelog entries. You may do this with:: |
|
3652
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
569 |
|
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
570 db.security.addPermissionToRole('User', 'Create', 'timelog') |
|
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
571 db.security.addPermissionToRole('User', 'View', 'timelog') |
|
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
572 |
| 3653 | 573 If users are also able to *edit* timelog entries, then also include:: |
|
3652
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
574 |
|
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
575 db.security.addPermissionToRole('User', 'Edit', 'timelog') |
|
3a19d31be628
add in note about perms
Richard Jones <richard@users.sourceforge.net>
parents:
3649
diff
changeset
|
576 |
| 6163 | 577 .. index:: schema; example changes |
| 578 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
579 2. Link to the new class from your issue class (again, in |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2958
diff
changeset
|
580 ``schema.py``):: |
| 1262 | 581 |
| 582 issue = IssueClass(db, "issue", | |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
583 assignedto=Link("user"), keyword=Multilink("keyword"), |
| 1262 | 584 priority=Link("priority"), status=Link("status"), |
| 585 times=Multilink("timelog")) | |
| 586 | |
| 587 the "times" property is the new link to the "timelog" class. | |
| 588 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
589 3. We'll need to let people add in times to the issue, so in the web |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
590 interface we'll have a new entry field. This is a special field |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
591 because unlike the other fields in the ``issue.item`` template, it |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
592 affects a different item (a timelog item) and not the template's |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
593 item (an issue). We have a special syntax for form fields that affect |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
594 items other than the template default item (see the cgi |
|
7352
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
595 documentation on `special form variables |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
596 <reference.html#special-form-variables>`_). In particular, we add a |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
597 field to capture a new timelog item's period:: |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
598 |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
599 <tr> |
|
1825
fad32dafc174
Replaced all uses of the 'nowrap' attribute with its CSS equivalent:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1817
diff
changeset
|
600 <th>Time Log</th> |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
601 <td colspan=3><input type="text" name="timelog-1@period" /> |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
602 (enter as '3y 1m 4d 2:40:02' or parts thereof) |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
603 </td> |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
604 </tr> |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
605 |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
606 and another hidden field that links that new timelog item (new |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
607 because it's marked as having id "-1") to the issue item. It looks |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
608 like this:: |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
609 |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
610 <input type="hidden" name="@link@times" value="timelog-1" /> |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
611 |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
612 On submission, the "-1" timelog item will be created and assigned a |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
613 real item id. The "times" property of the issue will have the new id |
|
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
614 added to it. |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
615 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
616 The full entry will now look like this:: |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
617 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
618 <tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
619 <th>Time Log</th> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
620 <td colspan=3><input type="text" name="timelog-1@period" /> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
621 (enter as '3y 1m 4d 2:40:02' or parts thereof) |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
622 <input type="hidden" name="@link@times" value="timelog-1" /> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
623 </td> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
624 </tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
625 |
|
7352
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
626 .. _adding-a-time-log-to-your-issues-4: |
|
1679
e2caeaa34ed4
fix timelog documentation, add new cgi special for variable doc
Richard Jones <richard@users.sourceforge.net>
parents:
1674
diff
changeset
|
627 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
628 4. We want to display a total of the timelog times that have been |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
629 accumulated for an issue. To do this, we'll need to actually write |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
630 some Python code, since it's beyond the scope of PageTemplates to |
| 2915 | 631 perform such calculations. We do this by adding a module ``timespent.py`` |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
632 to the ``extensions`` directory in our tracker. The contents of this |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
633 file is as follows:: |
| 2915 | 634 |
|
3717
5770f1802cd0
better conflict retry in postgresql backend [SF#1552809]
Richard Jones <richard@users.sourceforge.net>
parents:
3697
diff
changeset
|
635 from roundup import date |
|
5770f1802cd0
better conflict retry in postgresql backend [SF#1552809]
Richard Jones <richard@users.sourceforge.net>
parents:
3697
diff
changeset
|
636 |
| 2915 | 637 def totalTimeSpent(times): |
| 638 ''' Call me with a list of timelog items (which have an | |
| 639 Interval "period" property) | |
|
1270
c3424abf7f77
added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents:
1262
diff
changeset
|
640 ''' |
|
3717
5770f1802cd0
better conflict retry in postgresql backend [SF#1552809]
Richard Jones <richard@users.sourceforge.net>
parents:
3697
diff
changeset
|
641 total = date.Interval('0d') |
| 2915 | 642 for time in times: |
| 643 total += time.period._value | |
| 644 return total | |
| 645 | |
| 646 def init(instance): | |
| 647 instance.registerUtil('totalTimeSpent', totalTimeSpent) | |
| 648 | |
| 649 We will now be able to access the ``totalTimeSpent`` function via the | |
| 650 ``utils`` variable in our templates, as shown in the next step. | |
|
1270
c3424abf7f77
added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents:
1262
diff
changeset
|
651 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
652 5. Display the timelog for an issue:: |
| 1262 | 653 |
| 654 <table class="otherinfo" tal:condition="context/times"> | |
|
1270
c3424abf7f77
added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents:
1262
diff
changeset
|
655 <tr><th colspan="3" class="header">Time Log |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
656 <tal:block |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
657 tal:replace="python:utils.totalTimeSpent(context.times)" /> |
|
1270
c3424abf7f77
added ability to implement new templating utility methods
Richard Jones <richard@users.sourceforge.net>
parents:
1262
diff
changeset
|
658 </th></tr> |
| 1262 | 659 <tr><th>Date</th><th>Period</th><th>Logged By</th></tr> |
| 660 <tr tal:repeat="time context/times"> | |
| 661 <td tal:content="time/creation"></td> | |
| 662 <td tal:content="time/period"></td> | |
| 663 <td tal:content="time/creator"></td> | |
| 664 </tr> | |
| 665 </table> | |
| 666 | |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
667 I put this just above the Messages log in my issue display. Note our |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
668 use of the ``totalTimeSpent`` method which will total up the times |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
669 for the issue and return a new Interval. That will be automatically |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
670 displayed in the template as text like "+ 1y 2:40" (1 year, 2 hours |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
671 and 40 minutes). |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
672 |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
673 6. If you're using a persistent web server - ``roundup-server`` or |
|
5891
6e341009593b
Deprecate mod_python issue2551005
John Rouillard <rouilj@ieee.org>
parents:
5881
diff
changeset
|
674 ``mod_wsgi`` for example - then you'll need to restart that to pick up |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
675 the code changes. When that's done, you'll be able to use the new |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
676 time logging interface. |
| 1262 | 677 |
|
3657
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
678 An extension of this modification attaches the timelog entries to any |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
679 change message entered at the time of the timelog entry: |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
680 |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
681 A. Add a link to the timelog to the msg class in ``schema.py``: |
|
3657
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
682 |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
683 msg = FileClass(db, "msg", |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
684 author=Link("user", do_journal='no'), |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
685 recipients=Multilink("user", do_journal='no'), |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
686 date=Date(), |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
687 summary=String(), |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
688 files=Multilink("file"), |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
689 messageid=String(), |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
690 inreplyto=String(), |
|
3657
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
691 times=Multilink("timelog")) |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
692 |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
693 B. Add a new hidden field that links that new timelog item (new |
|
3657
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
694 because it's marked as having id "-1") to the new message. |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
695 The link is placed in ``issue.item.html`` in the same section that |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
696 handles the timelog entry. |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
697 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
698 It looks like this after this addition:: |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
699 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
700 <tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
701 <th>Time Log</th> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
702 <td colspan=3><input type="text" name="timelog-1@period" /> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
703 (enter as '3y 1m 4d 2:40:02' or parts thereof) |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
704 <input type="hidden" name="@link@times" value="timelog-1" /> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
705 <input type="hidden" name="msg-1@link@times" value="timelog-1" /> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
706 </td> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
707 </tr> |
|
3657
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
708 |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
709 The "times" property of the message will have the new id added to it. |
|
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
710 |
|
3818
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
711 C. Add the timelog listing from step 5. to the ``msg.item.html`` template |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
712 so that the timelog entry appears on the message view page. Note that |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
713 the call to totalTimeSpent is not used here since there will only be one |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
714 single timelog entry for each message. |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
715 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
716 I placed it after the Date entry like this:: |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
717 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
718 <tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
719 <th i18n:translate="">Date:</th> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
720 <td tal:content="context/date"></td> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
721 </tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
722 </table> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
723 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
724 <table class="otherinfo" tal:condition="context/times"> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
725 <tr><th colspan="3" class="header">Time Log</th></tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
726 <tr><th>Date</th><th>Period</th><th>Logged By</th></tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
727 <tr tal:repeat="time context/times"> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
728 <td tal:content="time/creation"></td> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
729 <td tal:content="time/period"></td> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
730 <td tal:content="time/creator"></td> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
731 </tr> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
732 </table> |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
733 |
|
e5043875a03d
Improved due_date and timelog customisation docs [SF#1625124]
Richard Jones <richard@users.sourceforge.net>
parents:
3796
diff
changeset
|
734 <table class="messages"> |
|
3657
f7db2771e87d
add info about storing Store TimeLog with Messages
Richard Jones <richard@users.sourceforge.net>
parents:
3653
diff
changeset
|
735 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
736 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
737 Tracking different types of issues |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
738 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
739 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
740 Sometimes you will want to track different types of issues - developer, |
|
2159
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
741 customer support, systems, sales leads, etc. A single Roundup tracker is |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
742 able to support multiple types of issues. This example demonstrates adding |
| 3289 | 743 a system support issue class to a tracker. |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
744 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
745 1. Figure out what information you're going to want to capture. OK, so |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
746 this is obvious, but sometimes it's better to actually sit down for a |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
747 while and think about the schema you're going to implement. |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
748 |
| 3289 | 749 2. Add the new issue class to your tracker's ``schema.py``. Just after the |
| 750 "issue" class definition, add:: | |
| 751 | |
| 752 # list our systems | |
| 753 system = Class(db, "system", name=String(), order=Number()) | |
| 754 system.setkey("name") | |
| 755 | |
| 756 # store issues related to those systems | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
757 support = IssueClass(db, "support", |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
758 assignedto=Link("user"), keyword=Multilink("keyword"), |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
759 status=Link("status"), deadline=Date(), |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
760 affects=Multilink("system")) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
761 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
762 3. Copy the existing ``issue.*`` (item, search and index) templates in the |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
763 tracker's ``html`` to ``support.*``. Edit them so they use the properties |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
764 defined in the ``support`` class. Be sure to check for hidden form |
|
2159
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
765 variables like "required" to make sure they have the correct set of |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
766 required properties. |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
767 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
768 4. Edit the modules in the ``detectors``, adding lines to their ``init`` |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
769 functions where appropriate. Look for ``audit`` and ``react`` registrations |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
770 on the ``issue`` class, and duplicate them for ``support``. |
|
2159
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
771 |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
772 5. Create a new sidebar box for the new support class. Duplicate the |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
773 existing issues one, changing the ``issue`` class name to ``support``. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
774 |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
775 6. Re-start your tracker and start using the new ``support`` class. |
|
2159
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
776 |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
777 |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
778 Optionally, you might want to restrict the users able to access this new |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
779 class to just the users with a new "SysAdmin" Role. To do this, we add |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
780 some security declarations:: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
781 |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
782 db.security.addPermissionToRole('SysAdmin', 'View', 'support') |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
783 db.security.addPermissionToRole('SysAdmin', 'Create', 'support') |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
784 db.security.addPermissionToRole('SysAdmin', 'Edit', 'support') |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
785 |
|
2159
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
786 You would then (as an "admin" user) edit the details of the appropriate |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
787 users, and add "SysAdmin" to their Roles list. |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
788 |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
789 Alternatively, you might want to change the Edit/View permissions granted |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
790 for the ``issue`` class so that it's only available to users with the "System" |
|
2159
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
791 or "Developer" Role, and then the new class you're adding is available to |
|
c22329f379ae
*** empty log message ***
Richard Jones <richard@users.sourceforge.net>
parents:
2156
diff
changeset
|
792 all with the "User" Role. |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
793 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
794 |
|
4891
ad3d628e73f2
docs: Link custom authentication examples in admin guide
anatoly techtonik <techtonik@gmail.com>
parents:
4888
diff
changeset
|
795 .. _external-authentication: |
|
ad3d628e73f2
docs: Link custom authentication examples in admin guide
anatoly techtonik <techtonik@gmail.com>
parents:
4888
diff
changeset
|
796 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
797 Using External User Databases |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
798 ----------------------------- |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
799 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
800 Using an external password validation source |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
801 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
802 |
|
3228
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
803 .. note:: You will need to either have an "admin" user in your external |
|
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
804 password source *or* have one of your regular users have |
|
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
805 the Admin Role assigned. If you need to assign the Role *after* |
|
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
806 making the changes below, you may use the ``roundup-admin`` |
|
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
807 program to edit a user's details. |
|
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
808 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
809 We have a centrally-managed password changing system for our users. This |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
810 results in a UN*X passwd-style file that we use for verification of |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
811 users. Entries in the file consist of ``name:password`` where the |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
812 password is encrypted using the standard UN*X ``crypt()`` function (see |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
813 the ``crypt`` module in your Python distribution). An example entry |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
814 would be:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
815 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
816 admin:aamrgyQfDFSHw |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
817 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
818 Each user of Roundup must still have their information stored in the Roundup |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
819 database - we just use the passwd file to check their password. To do this, we |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
820 need to override the standard ``verifyPassword`` method defined in |
| 2915 | 821 ``roundup.cgi.actions.LoginAction`` and register the new class. The |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
822 following is added as ``externalpassword.py`` in the tracker ``extensions`` |
| 2915 | 823 directory:: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
824 |
|
3228
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
825 import os, crypt |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
826 from roundup.cgi.actions import LoginAction |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
827 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
828 class ExternalPasswordLoginAction(LoginAction): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
829 def verifyPassword(self, userid, password): |
| 2915 | 830 '''Look through the file, line by line, looking for a |
| 831 name that matches. | |
| 832 ''' | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
833 # get the user's username |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
834 username = self.db.user.get(userid, 'username') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
835 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
836 # the passwords are stored in the "passwd.txt" file in the |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
837 # tracker home |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
838 file = os.path.join(self.db.config.TRACKER_HOME, 'passwd.txt') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
839 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
840 # see if we can find a match |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
841 for ent in [line.strip().split(':') for line in |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
842 open(file).readlines()]: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
843 if ent[0] == username: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
844 return crypt.crypt(password, ent[1][:2]) == ent[1] |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
845 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
846 # user doesn't exist in the file |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
847 return 0 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
848 |
| 2915 | 849 def init(instance): |
| 850 instance.registerAction('login', ExternalPasswordLoginAction) | |
| 851 | |
| 852 You should also remove the redundant password fields from the ``user.item`` | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
853 template. |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
854 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
855 |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
856 Using a UN*X passwd file as the user database |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
857 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
858 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
859 On some systems the primary store of users is the UN*X passwd file. It |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
860 holds information on users such as their username, real name, password |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
861 and primary user group. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
862 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
863 Roundup can use this store as its primary source of user information, |
|
7268
91125d474c1e
doc updates, normalize roundup => Roundup, add links, typo fixes
John Rouillard <rouilj@ieee.org>
parents:
7267
diff
changeset
|
864 but it needs additional information too - email address(es), Roundup |
|
91125d474c1e
doc updates, normalize roundup => Roundup, add links, typo fixes
John Rouillard <rouilj@ieee.org>
parents:
7267
diff
changeset
|
865 Roles, vacation flags, Roundup hyperdb item ids, etc. Also, "retired" |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
866 users must still exist in the user database, unlike some passwd files in |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
867 which the users are removed when they no longer have access to a system. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
868 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
869 To make use of the passwd file, we therefore synchronise between the two |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
870 user stores. We also use the passwd file to validate the user logins, as |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
871 described in the previous example, `using an external password |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
872 validation source`_. We keep the user lists in sync using a fairly |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
873 simple script that runs once a day, or several times an hour if more |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
874 immediate access is needed. In short, it: |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
875 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
876 1. parses the passwd file, finding usernames, passwords and real names, |
|
7268
91125d474c1e
doc updates, normalize roundup => Roundup, add links, typo fixes
John Rouillard <rouilj@ieee.org>
parents:
7267
diff
changeset
|
877 2. compares that list to the current Roundup user list: |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1293
diff
changeset
|
878 |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
879 a. entries no longer in the passwd file are *retired* |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
880 b. entries with mismatching real names are *updated* |
| 1293 | 881 c. entries only exist in the passwd file are *created* |
|
1299
b2d04ce03802
Email improvements.
Richard Jones <richard@users.sourceforge.net>
parents:
1293
diff
changeset
|
882 |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
883 3. send an email to administrators to let them know what's been done. |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
884 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
885 The retiring and updating are simple operations, requiring only a call |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
886 to ``retire()`` or ``set()``. The creation operation requires more |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
887 information though - the user's email address and their Roundup Roles. |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
888 We're going to assume that the user's email address is the same as their |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
889 login name, so we just append the domain name to that. The Roles are |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
890 determined using the passwd group identifier - mapping their UN*X group |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
891 to an appropriate set of Roles. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
892 |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
893 The script to perform all this, broken up into its main components, is |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
894 as follows. Firstly, we import the necessary modules and open the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
895 tracker we're to work on:: |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
896 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
897 import sys, os, smtplib |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
898 from roundup import instance, date |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
899 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
900 # open the tracker |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
901 tracker_home = sys.argv[1] |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
902 tracker = instance.open(tracker_home) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
903 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
904 Next we read in the *passwd* file from the tracker home:: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
905 |
|
3228
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
906 # read in the users from the "passwd.txt" file |
|
1b15e9eeb592
fixes to the "Using an external password validation source"...
Richard Jones <richard@users.sourceforge.net>
parents:
3130
diff
changeset
|
907 file = os.path.join(tracker_home, 'passwd.txt') |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
908 users = [x.strip().split(':') for x in open(file).readlines()] |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
909 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
910 Handle special users (those to ignore in the file, and those who don't |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
911 appear in the file):: |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
912 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
913 # users to not keep ever, pre-load with the users I know aren't |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
914 # "real" users |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
915 ignore = ['ekmmon', 'bfast', 'csrmail'] |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
916 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
917 # users to keep - pre-load with the roundup-specific users |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
918 keep = ['comment_pool', 'network_pool', 'admin', 'dev-team', |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
919 'cs_pool', 'anonymous', 'system_pool', 'automated'] |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
920 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
921 Now we map the UN*X group numbers to the Roles that users should have:: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
922 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
923 roles = { |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
924 '501': 'User,Tech', # tech |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
925 '502': 'User', # finance |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
926 '503': 'User,CSR', # customer service reps |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
927 '504': 'User', # sales |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
928 '505': 'User', # marketing |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
929 } |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
930 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
931 Now we do all the work. Note that the body of the script (where we have |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
932 the tracker database open) is wrapped in a ``try`` / ``finally`` clause, |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
933 so that we always close the database cleanly when we're finished. So, we |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
934 now do all the work:: |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
935 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
936 # open the database |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
937 db = tracker.open('admin') |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
938 try: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
939 # store away messages to send to the tracker admins |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
940 msg = [] |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
941 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
942 # loop over the users list read in from the passwd file |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
943 for user,passw,uid,gid,real,home,shell in users: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
944 if user in ignore: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
945 # this user shouldn't appear in our tracker |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
946 continue |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
947 keep.append(user) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
948 try: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
949 # see if the user exists in the tracker |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
950 uid = db.user.lookup(user) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
951 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
952 # yes, they do - now check the real name for correctness |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
953 if real != db.user.get(uid, 'realname'): |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
954 db.user.set(uid, realname=real) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
955 msg.append('FIX %s - %s'%(user, real)) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
956 except KeyError: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
957 # nope, the user doesn't exist |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
958 db.user.create(username=user, realname=real, |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
959 address='%s@ekit-inc.com'%user, roles=roles[gid]) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
960 msg.append('ADD %s - %s (%s)'%(user, real, roles[gid])) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
961 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
962 # now check that all the users in the tracker are also in our |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
963 # "keep" list - retire those who aren't |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
964 for uid in db.user.list(): |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
965 user = db.user.get(uid, 'username') |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
966 if user not in keep: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
967 db.user.retire(uid) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
968 msg.append('RET %s'%user) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
969 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
970 # if we did work, then send email to the tracker admins |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
971 if msg: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
972 # create the email |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
973 msg = '''Subject: %s user database maintenance |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
974 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
975 %s |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
976 '''%(db.config.TRACKER_NAME, '\n'.join(msg)) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
977 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
978 # send the email |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
979 smtp = smtplib.SMTP(db.config.MAILHOST) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
980 addr = db.config.ADMIN_EMAIL |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
981 smtp.sendmail(addr, addr, msg) |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
982 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
983 # now we're done - commit the changes |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
984 db.commit() |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
985 finally: |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
986 # always close the database cleanly |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
987 db.close() |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
988 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
989 And that's it! |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
990 |
|
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
991 |
|
1680
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
992 Using an LDAP database for user information |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
993 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
1680
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
994 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
995 A script that reads users from an LDAP store using |
| 5367 | 996 https://pypi.org/project/python-ldap/ and then compares the list to the users in the |
|
7268
91125d474c1e
doc updates, normalize roundup => Roundup, add links, typo fixes
John Rouillard <rouilj@ieee.org>
parents:
7267
diff
changeset
|
997 Roundup user database would be pretty easy to write. You'd then have it run |
|
1680
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
998 once an hour / day (or on demand if you can work that into your LDAP store |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
999 workflow). See the example `Using a UN*X passwd file as the user database`_ |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1000 for more information about doing this. |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1001 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1002 To authenticate off the LDAP store (rather than using the passwords in the |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1003 Roundup user database) you'd use the same python-ldap module inside an |
|
2017
31d920b31642
Update customization examples too, expand upgrade notice a bit.
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
2016
diff
changeset
|
1004 extension to the cgi interface. You'd do this by overriding the method called |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1005 ``verifyPassword`` on the ``LoginAction`` class in your tracker's |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1006 ``extensions`` directory (see `using an external password validation |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1007 source`_). The method is implemented by default as:: |
|
1680
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1008 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1009 def verifyPassword(self, userid, password): |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1010 ''' Verify the password that the user has supplied |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1011 ''' |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1012 stored = self.db.user.get(self.userid, 'password') |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1013 if password == stored: |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1014 return 1 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1015 if not password and not stored: |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1016 return 1 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1017 return 0 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1018 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1019 So you could reimplement this as something like:: |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1020 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1021 def verifyPassword(self, userid, password): |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1022 ''' Verify the password that the user has supplied |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1023 ''' |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1024 # look up some unique LDAP information about the user |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1025 username = self.db.user.get(self.userid, 'username') |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1026 # now verify the password supplied against the LDAP store |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1027 |
|
86cc794cc3a0
added simplistic LDAP authentication example
Richard Jones <richard@users.sourceforge.net>
parents:
1679
diff
changeset
|
1028 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1029 Changes to Tracker Behaviour |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1030 ---------------------------- |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1031 |
|
6168
de9d602c8ce6
more index entries and CHANGES.txt update for them.
John Rouillard <rouilj@ieee.org>
parents:
6163
diff
changeset
|
1032 .. index:: single: auditors; how to register (example) |
|
de9d602c8ce6
more index entries and CHANGES.txt update for them.
John Rouillard <rouilj@ieee.org>
parents:
6163
diff
changeset
|
1033 single: reactors; how to register (example) |
|
de9d602c8ce6
more index entries and CHANGES.txt update for them.
John Rouillard <rouilj@ieee.org>
parents:
6163
diff
changeset
|
1034 |
|
3830
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1035 Preventing SPAM |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1036 ~~~~~~~~~~~~~~~ |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1037 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1038 The following detector code may be installed in your tracker's |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1039 ``detectors`` directory. It will block any messages being created that |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1040 have HTML attachments (a very common vector for spam and phishing) |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1041 and any messages that have more than 2 HTTP URLs in them. Just copy |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1042 the following into ``detectors/anti_spam.py`` in your tracker:: |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1043 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1044 from roundup.exceptions import Reject |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1045 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1046 def reject_html(db, cl, nodeid, newvalues): |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1047 if newvalues['type'] == 'text/html': |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1048 raise Reject('not allowed') |
|
3830
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1049 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1050 def reject_manylinks(db, cl, nodeid, newvalues): |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1051 content = newvalues['content'] |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1052 if content.count('http://') > 2: |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1053 raise Reject('not allowed') |
|
3830
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1054 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1055 def init(db): |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1056 db.file.audit('create', reject_html) |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1057 db.msg.audit('create', reject_manylinks) |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1058 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1059 You may also wish to block image attachments if your tracker does not |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1060 need that ability:: |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1061 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1062 if newvalues['type'].startswith('image/'): |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1063 raise Reject('not allowed') |
|
3830
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1064 |
|
a48c514c465f
Add simple anti-spam recipe to docs
Richard Jones <richard@users.sourceforge.net>
parents:
3818
diff
changeset
|
1065 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1066 Stop "nosy" messages going to people on vacation |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1067 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1068 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1069 When users go on vacation and set up vacation email bouncing, you'll |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1070 start to see a lot of messages come back through Roundup "Fred is on |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1071 vacation". Not very useful, and relatively easy to stop. |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1072 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1073 1. add a "vacation" flag to your users:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1074 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1075 user = Class(db, "user", |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1076 username=String(), password=Password(), |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1077 address=String(), realname=String(), |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1078 phone=String(), organisation=String(), |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1079 alternate_addresses=String(), |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1080 roles=String(), queries=Multilink("query"), |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1081 vacation=Boolean()) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1082 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1083 2. So that users may edit the vacation flags, add something like the |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1084 following to your ``user.item`` template:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1085 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1086 <tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1087 <th>On Vacation</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1088 <td tal:content="structure context/vacation/field">vacation</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1089 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1090 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1091 3. edit your detector ``nosyreactor.py`` so that the ``nosyreaction()`` |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1092 consists of:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1093 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1094 def nosyreaction(db, cl, nodeid, oldvalues): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1095 users = db.user |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1096 messages = db.msg |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1097 # send a copy of all new messages to the nosy list |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1098 for msgid in determineNewMessages(cl, nodeid, oldvalues): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1099 try: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1100 # figure the recipient ids |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1101 sendto = [] |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1102 seen_message = {} |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1103 recipients = messages.get(msgid, 'recipients') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1104 for recipid in messages.get(msgid, 'recipients'): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1105 seen_message[recipid] = 1 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1106 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1107 # figure the author's id, and indicate they've received |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1108 # the message |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1109 authid = messages.get(msgid, 'author') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1110 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1111 # possibly send the message to the author, as long as |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1112 # they aren't anonymous |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1113 if (db.config.MESSAGES_TO_AUTHOR == 'yes' and |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1114 users.get(authid, 'username') != 'anonymous'): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1115 sendto.append(authid) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1116 seen_message[authid] = 1 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1117 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1118 # now figure the nosy people who weren't recipients |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1119 nosy = cl.get(nodeid, 'nosy') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1120 for nosyid in nosy: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1121 # Don't send nosy mail to the anonymous user (that |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1122 # user shouldn't appear in the nosy list, but just |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1123 # in case they do...) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1124 if users.get(nosyid, 'username') == 'anonymous': |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1125 continue |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1126 # make sure they haven't seen the message already |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1127 if nosyid not in seen_message: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1128 # send it to them |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1129 sendto.append(nosyid) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1130 recipients.append(nosyid) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1131 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1132 # generate a change note |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1133 if oldvalues: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1134 note = cl.generateChangeNote(nodeid, oldvalues) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1135 else: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1136 note = cl.generateCreateNote(nodeid) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1137 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1138 # we have new recipients |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1139 if sendto: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1140 # filter out the people on vacation |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1141 sendto = [i for i in sendto |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1142 if not users.get(i, 'vacation', 0)] |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1143 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1144 # map userids to addresses |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1145 sendto = [users.get(i, 'address') for i in sendto] |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1146 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1147 # update the message's recipients list |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1148 messages.set(msgid, recipients=recipients) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1149 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1150 # send the message |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1151 cl.send_message(nodeid, msgid, note, sendto) |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5239
diff
changeset
|
1152 except roundupdb.MessageSendError as message: |
|
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5239
diff
changeset
|
1153 raise roundupdb.DetectorError(message) |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1154 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1155 Note that this is the standard nosy reaction code, with the small |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1156 addition of:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1157 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1158 # filter out the people on vacation |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1159 sendto = [i for i in sendto if not users.get(i, 'vacation', 0)] |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1160 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1161 which filters out the users that have the vacation flag set to true. |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1162 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1163 Adding in state transition control |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1164 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1165 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1166 Sometimes tracker admins want to control the states to which users may |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1167 move issues. You can do this by following these steps: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1168 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1169 1. make "status" a required variable. This is achieved by adding the |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1170 following to the top of the form in the ``issue.item.html`` |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1171 template:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1172 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1173 <input type="hidden" name="@required" value="status"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1174 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1175 This will force users to select a status. |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1176 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1177 2. add a Multilink property to the status class:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1178 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1179 stat = Class(db, "status", ... , transitions=Multilink('status'), |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1180 ...) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1181 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1182 and then edit the statuses already created, either: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1183 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1184 a. through the web using the class list -> status class editor, or |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1185 b. using the ``roundup-admin`` "set" command. |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1186 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1187 3. add an auditor module ``checktransition.py`` in your tracker's |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1188 ``detectors`` directory, for example:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1189 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1190 def checktransition(db, cl, nodeid, newvalues): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1191 ''' Check that the desired transition is valid for the "status" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1192 property. |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1193 ''' |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1194 if 'status' not in newvalues: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1195 return |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1196 current = cl.get(nodeid, 'status') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1197 new = newvalues['status'] |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1198 if new == current: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1199 return |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1200 ok = db.status.get(current, 'transitions') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1201 if new not in ok: |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1202 raise ValueError('Status not allowed to move from "%s" to "%s"'%( |
|
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1203 db.status.get(current, 'name'), db.status.get(new, 'name'))) |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1204 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1205 def init(db): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1206 db.issue.audit('set', checktransition) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1207 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1208 4. in the ``issue.item.html`` template, change the status editing bit |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1209 from:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1210 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1211 <th>Status</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1212 <td tal:content="structure context/status/menu">status</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1213 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1214 to:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1215 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1216 <th>Status</th> |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
1217 <td> |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1218 <select tal:condition="context/id" name="status"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1219 <tal:block tal:define="ok context/status/transitions" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1220 tal:repeat="state db/status/list"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1221 <option tal:condition="python:state.id in ok" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1222 tal:attributes=" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1223 value state/id; |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1224 selected python:state.id == context.status.id" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1225 tal:content="state/name"></option> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1226 </tal:block> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1227 </select> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1228 <tal:block tal:condition="not:context/id" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1229 tal:replace="structure context/status/menu" /> |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
1230 </td> |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1231 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1232 which displays only the allowed status to transition to. |
|
1292
f7d9fefcae88
Fixes for SourceForge tracker bugs.
Richard Jones <richard@users.sourceforge.net>
parents:
1278
diff
changeset
|
1233 |
| 1262 | 1234 |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1235 Blocking issues that depend on other issues |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1236 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1237 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1238 We needed the ability to mark certain issues as "blockers" - that is, |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1239 they can't be resolved until another issue (the blocker) they rely on is |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1240 resolved. To achieve this: |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1241 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1242 1. Create a new property on the ``issue`` class: |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1243 ``blockers=Multilink("issue")``. To do this, edit the definition of |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1244 this class in your tracker's ``schema.py`` file. Change this:: |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1245 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1246 issue = IssueClass(db, "issue", |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1247 assignedto=Link("user"), keyword=Multilink("keyword"), |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1248 priority=Link("priority"), status=Link("status")) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1249 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1250 to this, adding the blockers entry:: |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1251 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1252 issue = IssueClass(db, "issue", |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1253 blockers=Multilink("issue"), |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1254 assignedto=Link("user"), keyword=Multilink("keyword"), |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1255 priority=Link("priority"), status=Link("status")) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1256 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1257 2. Add the new ``blockers`` property to the ``issue.item.html`` edit |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1258 page, using something like:: |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1259 |
|
1825
fad32dafc174
Replaced all uses of the 'nowrap' attribute with its CSS equivalent:
Johannes Gijsbers <jlgijsbers@users.sourceforge.net>
parents:
1817
diff
changeset
|
1260 <th>Waiting On</th> |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1261 <td> |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1262 <span tal:replace="structure python:context.blockers.field(showid=1, |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1263 size=20)" /> |
|
3881
e7050411a774
fix documentation per [SF#731171] thanks to Forest Wilkinson
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3878
diff
changeset
|
1264 <span tal:replace="structure python:db.issue.classhelp('id,title', |
|
e7050411a774
fix documentation per [SF#731171] thanks to Forest Wilkinson
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3878
diff
changeset
|
1265 property='blockers')" /> |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1266 <span tal:condition="context/blockers" |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1267 tal:repeat="blk context/blockers"> |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1268 <br>View: <a tal:attributes="href string:issue${blk/id}" |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1269 tal:content="blk/id"></a> |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1270 </span> |
|
3881
e7050411a774
fix documentation per [SF#731171] thanks to Forest Wilkinson
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3878
diff
changeset
|
1271 </td> |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1272 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1273 You'll need to fiddle with your item page layout to find an |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1274 appropriate place to put it - I'll leave that fun part up to you. |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1275 Just make sure it appears in the first table, possibly somewhere near |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1276 the "superseders" field. |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1277 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1278 3. Create a new detector module (see below) which enforces the rules: |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1279 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1280 - issues may not be resolved if they have blockers |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1281 - when a blocker is resolved, it's removed from issues it blocks |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1282 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1283 The contents of the detector should be something like this:: |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1284 |
| 3258 | 1285 |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1286 def blockresolution(db, cl, nodeid, newvalues): |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1287 ''' If the issue has blockers, don't allow it to be resolved. |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1288 ''' |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1289 if nodeid is None: |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1290 blockers = [] |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1291 else: |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1292 blockers = cl.get(nodeid, 'blockers') |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1293 blockers = newvalues.get('blockers', blockers) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1294 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1295 # don't do anything if there's no blockers or the status hasn't |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1296 # changed |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1297 if not blockers or 'status' not in newvalues: |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1298 return |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1299 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1300 # get the resolved state ID |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1301 resolved_id = db.status.lookup('resolved') |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1302 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1303 # format the info |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1304 u = db.config.TRACKER_WEB |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1305 s = ', '.join(['<a href="%sissue%s">%s</a>'%( |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1306 u,id,id) for id in blockers]) |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1307 if len(blockers) == 1: |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1308 s = 'issue %s is'%s |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1309 else: |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1310 s = 'issues %s are'%s |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1311 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1312 # ok, see if we're trying to resolve |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1313 if newvalues['status'] == resolved_id: |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1314 raise ValueError("This issue can't be resolved until %s resolved."%s) |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1315 |
| 3258 | 1316 |
| 1317 def resolveblockers(db, cl, nodeid, oldvalues): | |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1318 ''' When we resolve an issue that's a blocker, remove it from the |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1319 blockers list of the issue(s) it blocks. |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1320 ''' |
| 3258 | 1321 newstatus = cl.get(nodeid,'status') |
| 1322 | |
| 1323 # no change? | |
| 1324 if oldvalues.get('status', None) == newstatus: | |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1325 return |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1326 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1327 resolved_id = db.status.lookup('resolved') |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1328 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1329 # interesting? |
| 3258 | 1330 if newstatus != resolved_id: |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1331 return |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1332 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1333 # yes - find all the blocked issues, if any, and remove me from |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1334 # their blockers list |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1335 issues = cl.find(blockers=nodeid) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1336 for issueid in issues: |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1337 blockers = cl.get(issueid, 'blockers') |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1338 if nodeid in blockers: |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1339 blockers.remove(nodeid) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1340 cl.set(issueid, blockers=blockers) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1341 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1342 def init(db): |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1343 # might, in an obscure situation, happen in a create |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1344 db.issue.audit('create', blockresolution) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1345 db.issue.audit('set', blockresolution) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1346 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1347 # can only happen on a set |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1348 db.issue.react('set', resolveblockers) |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1349 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1350 Put the above code in a file called "blockers.py" in your tracker's |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1351 "detectors" directory. |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1352 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1353 4. Finally, and this is an optional step, modify the tracker web page |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1354 URLs so they filter out issues with any blockers. You do this by |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1355 adding an additional filter on "blockers" for the value "-1". For |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1356 example, the existing "Show All" link in the "page" template (in the |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1357 tracker's "html" directory) looks like this:: |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1358 |
|
3796
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1359 <a href="#" |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1360 tal:attributes="href python:request.indexargs_url('issue', { |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1361 '@sort': '-activity', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1362 '@group': 'priority', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1363 '@filter': 'status', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1364 '@columns': columns_showall, |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1365 '@search_text': '', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1366 'status': status_notresolved, |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1367 '@dispname': i18n.gettext('Show All'), |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1368 })" |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1369 i18n:translate="">Show All</a><br> |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1370 |
|
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1371 modify it to add the "blockers" info to the URL (note, both the |
| 3590 | 1372 "@filter" *and* "blockers" values must be specified):: |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1373 |
|
3796
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1374 <a href="#" |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1375 tal:attributes="href python:request.indexargs_url('issue', { |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1376 '@sort': '-activity', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1377 '@group': 'priority', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1378 '@filter': 'status,blockers', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1379 '@columns': columns_showall, |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1380 '@search_text': '', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1381 'status': status_notresolved, |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1382 'blockers': '-1', |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1383 '@dispname': i18n.gettext('Show All'), |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1384 })" |
|
aef19fff38dd
If-Modified-Since handling was broken
Richard Jones <richard@users.sourceforge.net>
parents:
3772
diff
changeset
|
1385 i18n:translate="">Show All</a><br> |
| 2409 | 1386 |
| 3052 | 1387 The above examples are line-wrapped on the trailing & and should |
| 1388 be unwrapped. | |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1389 |
|
1674
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1390 That's it. You should now be able to set blockers on your issues. Note |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1391 that if you want to know whether an issue has any other issues dependent |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1392 on it (i.e. it's in their blockers list) you can look at the journal |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1393 history at the bottom of the issue page - look for a "link" event to |
|
0807e3676133
Reflowed to 72 columns, some tidying, updating & rephrasing ..
Jean Jordaan <neaj@users.sourceforge.net>
parents:
1671
diff
changeset
|
1394 another issue's "blockers" property. |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1395 |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1396 Add users to the nosy list based on the keyword |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1397 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1398 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1399 Let's say we need the ability to automatically add users to the nosy |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1400 list based |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1401 on the occurance of a keyword. Every user should be allowed to edit their |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1402 own list of keywords for which they want to be added to the nosy list. |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1403 |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1404 Below, we'll show that this change can be done with minimal |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1405 understanding of the Roundup system, using only copy and paste. |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1406 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1407 This requires three changes to the tracker: a change in the database to |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1408 allow per-user recording of the lists of keywords for which he wants to |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1409 be put on the nosy list, a change in the user view allowing them to edit |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1410 this list of keywords, and addition of an auditor which updates the nosy |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1411 list when a keyword is set. |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1412 |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1413 Adding the nosy keyword list |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1414 :::::::::::::::::::::::::::: |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1415 |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1416 The change to make in the database, is that for any user there should be a list |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1417 of keywords for which he wants to be put on the nosy list. Adding a |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1418 ``Multilink`` of ``keyword`` seems to fullfill this. As such, all that has to |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1419 be done is to add a new field to the definition of ``user`` within the file |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1420 ``schema.py``. We will call this new field ``nosy_keywords``, and the updated |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1421 definition of user will be:: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1422 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1423 user = Class(db, "user", |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1424 username=String(), password=Password(), |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1425 address=String(), realname=String(), |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1426 phone=String(), organisation=String(), |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1427 alternate_addresses=String(), |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1428 queries=Multilink('query'), roles=String(), |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1429 timezone=String(), |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1430 nosy_keywords=Multilink('keyword')) |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1431 |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1432 Changing the user view to allow changing the nosy keyword list |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1433 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1434 |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1435 We want any user to be able to change the list of keywords for which |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1436 he will by default be added to the nosy list. We choose to add this |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1437 to the user view, as is generated by the file ``html/user.item.html``. |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1438 We can easily |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1439 see that the keyword field in the issue view has very similar editing |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1440 requirements as our nosy keywords, both being lists of keywords. As |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1441 such, we look for Keywords in ``issue.item.html``, and extract the |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1442 associated parts from there. We add this to ``user.item.html`` at the |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1443 bottom of the list of viewed items (i.e. just below the 'Alternate |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1444 E-mail addresses' in the classic template):: |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1445 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1446 <tr> |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1447 <th>Nosy Keywords</th> |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1448 <td> |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1449 <span tal:replace="structure context/nosy_keywords/field" /> |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1450 <span tal:replace="structure python:db.keyword.classhelp(property='nosy_keywords')" /> |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1451 </td> |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1452 </tr> |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1453 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1454 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1455 Addition of an auditor to update the nosy list |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1456 :::::::::::::::::::::::::::::::::::::::::::::: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1457 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1458 The more difficult part is the logic to add |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1459 the users to the nosy list when required. |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1460 We choose to perform this action whenever the keywords on an |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1461 item are set (this includes the creation of items). |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1462 Here we choose to start out with a copy of the |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1463 ``detectors/nosyreaction.py`` detector, which we copy to the file |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1464 ``detectors/nosy_keyword_reaction.py``. |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1465 This looks like a good start as it also adds users |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1466 to the nosy list. A look through the code reveals that the |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1467 ``nosyreaction`` function actually sends the e-mail. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1468 We don't need this. Therefore, we can change the ``init`` function to:: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1469 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1470 def init(db): |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1471 db.issue.audit('create', update_kw_nosy) |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1472 db.issue.audit('set', update_kw_nosy) |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1473 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1474 After that, we rename the ``updatenosy`` function to ``update_kw_nosy``. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1475 The first two blocks of code in that function relate to setting |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1476 ``current`` to a combination of the old and new nosy lists. This |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1477 functionality is left in the new auditor. The following block of |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1478 code, which handled adding the assignedto user(s) to the nosy list in |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1479 ``updatenosy``, should be replaced by a block of code to add the |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1480 interested users to the nosy list. We choose here to loop over all |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1481 new keywords, than looping over all users, |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1482 and assign the user to the nosy list when the keyword occurs in the user's |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1483 ``nosy_keywords``. The next part in ``updatenosy`` -- adding the author |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1484 and/or recipients of a message to the nosy list -- is obviously not |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1485 relevant here and is thus deleted from the new auditor. The last |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1486 part, copying the new nosy list to ``newvalues``, can stay as is. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1487 This results in the following function:: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1488 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1489 def update_kw_nosy(db, cl, nodeid, newvalues): |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1490 '''Update the nosy list for changes to the keywords |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1491 ''' |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1492 # nodeid will be None if this is a new node |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1493 current = {} |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1494 if nodeid is None: |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1495 ok = ('new', 'yes') |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1496 else: |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1497 ok = ('yes',) |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1498 # old node, get the current values from the node if they haven't |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1499 # changed |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1500 if 'nosy' not in newvalues: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1501 nosy = cl.get(nodeid, 'nosy') |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1502 for value in nosy: |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1503 if value not in current: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1504 current[value] = 1 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1505 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1506 # if the nosy list changed in this transaction, init from the new value |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1507 if 'nosy' in newvalues: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1508 nosy = newvalues.get('nosy', []) |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1509 for value in nosy: |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1510 if not db.hasnode('user', value): |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1511 continue |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1512 if value not in current: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1513 current[value] = 1 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1514 |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1515 # add users with keyword in nosy_keywords to the nosy list |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1516 if 'keyword' in newvalues and newvalues['keyword'] is not None: |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1517 keyword_ids = newvalues['keyword'] |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1518 for keyword in keyword_ids: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1519 # loop over all users, |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1520 # and assign user to nosy when keyword in nosy_keywords |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1521 for user_id in db.user.list(): |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1522 nosy_kw = db.user.get(user_id, "nosy_keywords") |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1523 found = 0 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1524 for kw in nosy_kw: |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1525 if kw == keyword: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1526 found = 1 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1527 if found: |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1528 current[user_id] = 1 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1529 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1530 # that's it, save off the new nosy list |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1531 newvalues['nosy'] = list(current.keys()) |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1532 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1533 These two function are the only ones needed in the file. |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1534 |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1535 TODO: update this example to use the ``find()`` Class method. |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1536 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1537 Caveats |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1538 ::::::: |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1539 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1540 A few problems with the design here can be noted: |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1541 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1542 Multiple additions |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1543 When a user, after automatic selection, is manually removed |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1544 from the nosy list, he is added to the nosy list again when the |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1545 keyword list of the issue is updated. A better design might be |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1546 to only check which keywords are new compared to the old list |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1547 of keywords, and only add users when they have indicated |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1548 interest on a new keyword. |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1549 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1550 The code could also be changed to only trigger on the ``create()`` |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1551 event, rather than also on the ``set()`` event, thus only setting |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1552 the nosy list when the issue is created. |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1553 |
|
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1554 Scalability |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1555 In the auditor, there is a loop over all users. For a site with |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1556 only few users this will pose no serious problem; however, with |
|
1808
3ac35c8e1782
new example and some more installation docs
Richard Jones <richard@users.sourceforge.net>
parents:
1800
diff
changeset
|
1557 many users this will be a serious performance bottleneck. |
|
3904
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1558 A way out would be to link from the keywords to the users who |
|
91008ec8f9a0
retire "topic" usage
Justus Pendleton <jpend@users.sourceforge.net>
parents:
3881
diff
changeset
|
1559 selected these keywords as nosy keywords. This will eliminate the |
|
6168
de9d602c8ce6
more index entries and CHANGES.txt update for them.
John Rouillard <rouilj@ieee.org>
parents:
6163
diff
changeset
|
1560 loop over all users. See the ``rev_multilink`` attribute to make |
|
de9d602c8ce6
more index entries and CHANGES.txt update for them.
John Rouillard <rouilj@ieee.org>
parents:
6163
diff
changeset
|
1561 this easier. |
|
1559
6bfb9c9de03c
added blockers customisation example to doc
Richard Jones <richard@users.sourceforge.net>
parents:
1522
diff
changeset
|
1562 |
| 4781 | 1563 Restricting updates that arrive by email |
| 1564 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| 1565 | |
| 1566 Roundup supports multiple update methods: | |
| 1567 | |
| 1568 1. command line | |
| 1569 2. plain email | |
| 1570 3. pgp signed email | |
| 1571 4. web access | |
| 1572 | |
| 1573 in some cases you may need to prevent changes to properties by some of | |
| 1574 these methods. For example you can set up issues that are viewable | |
| 1575 only by people on the nosy list. So you must prevent unauthenticated | |
| 1576 changes to the nosy list. | |
| 1577 | |
| 1578 Since plain email can be easily forged, it does not provide sufficient | |
| 1579 authentication in this senario. | |
| 1580 | |
| 1581 To prevent this we can add a detector that audits the source of the | |
| 1582 transaction and rejects the update if it changes the nosy list. | |
| 1583 | |
| 1584 Create the detector (auditor) module and add it to the detectors | |
| 1585 directory of your tracker:: | |
| 1586 | |
| 1587 from roundup import roundupdb, hyperdb | |
| 1588 | |
| 1589 from roundup.mailgw import Unauthorized | |
| 1590 | |
| 1591 def restrict_nosy_changes(db, cl, nodeid, newvalues): | |
| 1592 '''Do not permit changes to nosy via email.''' | |
| 1593 | |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1594 if 'nosy' not in newvalues: |
| 4781 | 1595 # the nosy field has not changed so no need to check. |
| 1596 return | |
| 1597 | |
|
5881
9938c40e03bc
Add "rest" and "xmlrpc" values for database tx_Source property
John Rouillard <rouilj@ieee.org>
parents:
5759
diff
changeset
|
1598 if db.tx_Source in ['web', 'rest', 'xmlrpc', 'email-sig-openpgp', 'cli' ]: |
| 4781 | 1599 # if the source of the transaction is from an authenticated |
| 1600 # source or a privileged process allow the transaction. | |
| 1601 # Other possible sources: 'email' | |
| 1602 return | |
| 1603 | |
| 1604 # otherwise raise an error | |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5239
diff
changeset
|
1605 raise Unauthorized( \ |
| 4781 | 1606 'Changes to nosy property not allowed via %s for this issue.'%\ |
|
5248
198b6e810c67
Use Python-3-compatible 'as' syntax for except statements
Eric S. Raymond <esr@thyrsus.com>
parents:
5239
diff
changeset
|
1607 tx_Source) |
| 4781 | 1608 |
| 1609 def init(db): | |
| 1610 ''' Install restrict_nosy_changes to run after other auditors. | |
| 1611 | |
| 1612 Allow initial creation email to set nosy. | |
| 1613 So don't execute: db.issue.audit('create', requestedbyauditor) | |
| 1614 | |
| 1615 Set priority to 110 to run this auditor after other auditors | |
| 1616 that can cause nosy to change. | |
| 1617 ''' | |
| 1618 db.issue.audit('set', restrict_nosy_changes, 110) | |
| 1619 | |
| 1620 This detector (auditor) will prevent updates to the nosy field if it | |
| 1621 arrives by email. Since it runs after other auditors (due to the | |
| 1622 priority of 110), it will also prevent changes to the nosy field that | |
| 1623 are done by other auditors if triggered by an email. | |
| 1624 | |
| 1625 Note that db.tx_Source was not present in roundup versions before | |
|
4790
07014a4b8a49
tx_Source property: doc fix.
Bernhard Reiter <bernhard@intevation.de>
parents:
4781
diff
changeset
|
1626 1.4.22, so you must be running a newer version to use this detector. |
| 4781 | 1627 Read the CHANGES.txt document in the roundup source code for further |
| 1628 details on tx_Source. | |
| 1629 | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1630 Changes to Security and Permissions |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1631 ----------------------------------- |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1632 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1633 Restricting the list of users that are assignable to a task |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1634 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1635 |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2958
diff
changeset
|
1636 1. In your tracker's ``schema.py``, create a new Role, say "Developer":: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1637 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1638 db.security.addRole(name='Developer', description='A developer') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1639 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1640 2. Just after that, create a new Permission, say "Fixer", specific to |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1641 "issue":: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1642 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1643 p = db.security.addPermission(name='Fixer', klass='issue', |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1644 description='User is allowed to be assigned to fix issues') |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1645 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1646 3. Then assign the new Permission to your "Developer" Role:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1647 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1648 db.security.addPermissionToRole('Developer', p) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1649 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1650 4. In the issue item edit page (``html/issue.item.html`` in your tracker |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1651 directory), use the new Permission in restricting the "assignedto" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1652 list:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1653 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1654 <select name="assignedto"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1655 <option value="-1">- no selection -</option> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1656 <tal:block tal:repeat="user db/user/list"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1657 <option tal:condition="python:user.hasPermission( |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1658 'Fixer', context._classname)" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1659 tal:attributes=" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1660 value user/id; |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1661 selected python:user.id == context.assignedto" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1662 tal:content="user/realname"></option> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1663 </tal:block> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1664 </select> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1665 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1666 For extra security, you may wish to setup an auditor to enforce the |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1667 Permission requirement (install this as ``assignedtoFixer.py`` in your |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1668 tracker ``detectors`` directory):: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1669 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1670 def assignedtoMustBeFixer(db, cl, nodeid, newvalues): |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1671 ''' Ensure the assignedto value in newvalues is used with the |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1672 Fixer Permission |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1673 ''' |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1674 if 'assignedto' not in newvalues: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1675 # don't care |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1676 return |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1677 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1678 # get the userid |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1679 userid = newvalues['assignedto'] |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1680 if not db.security.hasPermission('Fixer', userid, cl.classname): |
|
5332
d0689aaa83db
Applied patch 0038 from issue2550960 to upgrade code examples in
John Rouillard <rouilj@ieee.org>
parents:
5268
diff
changeset
|
1681 raise ValueError('You do not have permission to edit %s'%cl.classname) |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1682 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1683 def init(db): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1684 db.issue.audit('set', assignedtoMustBeFixer) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1685 db.issue.audit('create', assignedtoMustBeFixer) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1686 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1687 So now, if an edit action attempts to set "assignedto" to a user that |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1688 doesn't have the "Fixer" Permission, the error will be raised. |
|
1816
61a23c293147
added another example
Richard Jones <richard@users.sourceforge.net>
parents:
1808
diff
changeset
|
1689 |
| 3121 | 1690 |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1691 Users may only edit their issues |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1692 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1693 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1694 In this case, users registering themselves are granted Provisional |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1695 access, meaning they |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1696 have access to edit the issues they submit, but not others. We create a new |
|
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1697 Role called "Provisional User" which is granted to newly-registered users, |
|
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1698 and has limited access. One of the Permissions they have is the new "Edit |
| 3121 | 1699 Own" on issues (regular users have "Edit".) |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1700 |
|
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1701 First up, we create the new Role and Permission structure in |
|
2983
9614a101b68f
Stuff from the train ride this morning:
Richard Jones <richard@users.sourceforge.net>
parents:
2958
diff
changeset
|
1702 ``schema.py``:: |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1703 |
| 3121 | 1704 # |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1705 # New users not approved by the admin |
| 3121 | 1706 # |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1707 db.security.addRole(name='Provisional User', |
|
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1708 description='New user registered via web or email') |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1709 |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1710 # These users need to be able to view and create issues but only edit |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1711 # and view their own |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1712 db.security.addPermissionToRole('Provisional User', 'Create', 'issue') |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1713 def own_issue(db, userid, itemid): |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1714 '''Determine whether the userid matches the creator of the issue.''' |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1715 return userid == db.issue.get(itemid, 'creator') |
|
3079
64df8d65cc54
fix "Users may only edit their issues"
Richard Jones <richard@users.sourceforge.net>
parents:
3052
diff
changeset
|
1716 p = db.security.addPermission(name='Edit', klass='issue', |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1717 check=own_issue, description='Can only edit own issues') |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1718 db.security.addPermissionToRole('Provisional User', p) |
|
3079
64df8d65cc54
fix "Users may only edit their issues"
Richard Jones <richard@users.sourceforge.net>
parents:
3052
diff
changeset
|
1719 p = db.security.addPermission(name='View', klass='issue', |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1720 check=own_issue, description='Can only view own issues') |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1721 db.security.addPermissionToRole('Provisional User', p) |
|
5537
d698d3d843a9
'Provisional User' example needed to have search permissions added
John Rouillard <rouilj@ieee.org>
parents:
5367
diff
changeset
|
1722 # This allows the interface to get the names of the properties |
|
d698d3d843a9
'Provisional User' example needed to have search permissions added
John Rouillard <rouilj@ieee.org>
parents:
5367
diff
changeset
|
1723 # in the issue. Used for selecting sorting and grouping |
|
d698d3d843a9
'Provisional User' example needed to have search permissions added
John Rouillard <rouilj@ieee.org>
parents:
5367
diff
changeset
|
1724 # on the index page. |
|
d698d3d843a9
'Provisional User' example needed to have search permissions added
John Rouillard <rouilj@ieee.org>
parents:
5367
diff
changeset
|
1725 p = db.security.addPermission(name='Search', klass='issue') |
|
d698d3d843a9
'Provisional User' example needed to have search permissions added
John Rouillard <rouilj@ieee.org>
parents:
5367
diff
changeset
|
1726 db.security.addPermissionToRole ('Provisional User', p) |
|
d698d3d843a9
'Provisional User' example needed to have search permissions added
John Rouillard <rouilj@ieee.org>
parents:
5367
diff
changeset
|
1727 |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1728 |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1729 # Assign the Permissions for issue-related classes |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1730 for cl in 'file', 'msg', 'query', 'keyword': |
| 3121 | 1731 db.security.addPermissionToRole('Provisional User', 'View', cl) |
| 1732 db.security.addPermissionToRole('Provisional User', 'Edit', cl) | |
| 1733 db.security.addPermissionToRole('Provisional User', 'Create', cl) | |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1734 for cl in 'priority', 'status': |
| 3121 | 1735 db.security.addPermissionToRole('Provisional User', 'View', cl) |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1736 |
|
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1737 # and give the new users access to the web and email interface |
|
2991
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1738 db.security.addPermissionToRole('Provisional User', 'Web Access') |
|
b9a55628a78d
more doc fixes
Richard Jones <richard@users.sourceforge.net>
parents:
2983
diff
changeset
|
1739 db.security.addPermissionToRole('Provisional User', 'Email Access') |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1740 |
|
3260
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1741 # make sure they can view & edit their own user record |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1742 def own_record(db, userid, itemid): |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1743 '''Determine whether the userid matches the item being accessed.''' |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1744 return userid == itemid |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1745 p = db.security.addPermission(name='View', klass='user', check=own_record, |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1746 description="User is allowed to view their own user details") |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1747 db.security.addPermissionToRole('Provisional User', p) |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1748 p = db.security.addPermission(name='Edit', klass='user', check=own_record, |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1749 description="User is allowed to edit their own user details") |
|
e41e1540a287
fix provisional user so they can view their own record
Richard Jones <richard@users.sourceforge.net>
parents:
3258
diff
changeset
|
1750 db.security.addPermissionToRole('Provisional User', p) |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1751 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1752 Then, in ``config.ini``, we change the Role assigned to newly-registered |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1753 users, replacing the existing ``'User'`` values:: |
|
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1754 |
|
2921
ad4fb8a14a97
more doc updates, not so many TODOs any more
Richard Jones <richard@users.sourceforge.net>
parents:
2915
diff
changeset
|
1755 [main] |
|
ad4fb8a14a97
more doc updates, not so many TODOs any more
Richard Jones <richard@users.sourceforge.net>
parents:
2915
diff
changeset
|
1756 ... |
|
4941
b76710818d31
Roundup Tracker isssue #: 2550857
John Rouillard <rouilj@ieee.org>
parents:
4921
diff
changeset
|
1757 new_web_user_roles = Provisional User |
|
b76710818d31
Roundup Tracker isssue #: 2550857
John Rouillard <rouilj@ieee.org>
parents:
4921
diff
changeset
|
1758 new_email_user_roles = Provisional User |
|
1954
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1759 |
|
a71bc3a6f433
Added 'Users may only edit their issues' customisation example.
Richard Jones <richard@users.sourceforge.net>
parents:
1952
diff
changeset
|
1760 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1761 All users may only view and edit issues, files and messages they create |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1762 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1763 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1764 Replace the standard "classic" tracker View and Edit Permission assignments |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1765 for the "issue", "file" and "msg" classes with the following:: |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1766 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1767 def checker(klass): |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1768 def check(db, userid, itemid, klass=klass): |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1769 return db.getclass(klass).get(itemid, 'creator') == userid |
|
3580
5c26b9bbd31a
fix "All users may only view and edit issues, files and messages they...
Richard Jones <richard@users.sourceforge.net>
parents:
3548
diff
changeset
|
1770 return check |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1771 for cl in 'issue', 'file', 'msg': |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1772 p = db.security.addPermission(name='View', klass=cl, |
|
6534
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1773 check=checker(cl), |
|
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1774 description='User can view only if creator.') |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1775 db.security.addPermissionToRole('User', p) |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1776 p = db.security.addPermission(name='Edit', klass=cl, |
|
6534
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1777 check=checker(cl), |
|
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1778 description='User can edit only if creator.') |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1779 db.security.addPermissionToRole('User', p) |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1780 db.security.addPermissionToRole('User', 'Create', cl) |
|
6534
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1781 # This allows the interface to get the names of the properties |
|
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1782 # in the issue. Used for selecting sorting and grouping |
|
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1783 # on the index page. |
|
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1784 p = db.security.addPermission(name='Search', klass='issue') |
|
7cfb7d4fce60
Fix docs mising Search permission for example.
John Rouillard <rouilj@ieee.org>
parents:
6470
diff
changeset
|
1785 db.security.addPermissionToRole ('User', p) |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1786 |
|
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1787 |
|
4300
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1788 Moderating user registration |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1789 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1790 |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1791 You could set up new-user moderation in a public tracker by: |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1792 |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1793 1. creating a new highly-restricted user role "Pending", |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1794 2. set the config new_web_user_roles and/or new_email_user_roles to that |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1795 role, |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1796 3. have an auditor that emails you when new users are created with that |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1797 role using roundup.mailer |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1798 4. edit the role to "User" for valid users. |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1799 |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1800 Some simple javascript might help in the last step. If you have high volume |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1801 you could search for all currently-Pending users and do a bulk edit of all |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1802 their roles at once (again probably with some simple javascript help). |
|
608919e3bbbf
add another simple recipe
Richard Jones <richard@users.sourceforge.net>
parents:
4296
diff
changeset
|
1803 |
|
3126
a2889d22db4a
the cgi templating code now checks item-level
Richard Jones <richard@users.sourceforge.net>
parents:
3123
diff
changeset
|
1804 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1805 Changes to the Web User Interface |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1806 --------------------------------- |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1807 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1808 Adding action links to the index page |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1809 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1810 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1811 Add a column to the ``item.index.html`` template. |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1812 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1813 Resolving the issue:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1814 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1815 <a tal:attributes="href |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1816 string:issue${i/id}?:status=resolved&:action=edit">resolve</a> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1817 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1818 "Take" the issue:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1819 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1820 <a tal:attributes="href |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1821 string:issue${i/id}?:assignedto=${request/user/id}&:action=edit">take</a> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1822 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1823 ... and so on. |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1824 |
|
1966
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1825 Colouring the rows in the issue index according to priority |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1826 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
1966
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1827 |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1828 A simple ``tal:attributes`` statement will do the bulk of the work here. In |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1829 the ``issue.index.html`` template, add this to the ``<tr>`` that |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1830 displays the rows of data:: |
|
1966
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1831 |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1832 <tr tal:attributes="class string:priority-${i/priority/plain}"> |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1833 |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1834 and then in your stylesheet (``style.css``) specify the colouring for the |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1835 different priorities, as follows:: |
|
1966
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1836 |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1837 tr.priority-critical td { |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1838 background-color: red; |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1839 } |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1840 |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1841 tr.priority-urgent td { |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1842 background-color: orange; |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1843 } |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1844 |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1845 and so on, with far less offensive colours :) |
|
c8d8d03b6d94
another example
Richard Jones <richard@users.sourceforge.net>
parents:
1954
diff
changeset
|
1846 |
|
2009
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1847 Editing multiple items in an index view |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1848 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
2009
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1849 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1850 To edit the status of all items in the item index view, edit the |
|
6329
207b0fc82fc1
Fix incorrect template (Nagy Gabor); spelling fix
John Rouillard <rouilj@ieee.org>
parents:
6293
diff
changeset
|
1851 ``issue.index.html``: |
|
2009
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1852 |
|
2726
aa95c79cff8b
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
2589
diff
changeset
|
1853 1. add a form around the listing table (separate from the existing |
|
aa95c79cff8b
clarification
Richard Jones <richard@users.sourceforge.net>
parents:
2589
diff
changeset
|
1854 index-page form), so at the top it reads:: |
|
2009
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1855 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1856 <form method="POST" tal:attributes="action request/classname"> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1857 <table class="list"> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1858 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1859 and at the bottom of that table:: |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1860 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1861 </table> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1862 </form |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1863 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1864 making sure you match the ``</table>`` from the list table, not the |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1865 navigation table or the subsequent form table. |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1866 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1867 2. in the display for the issue property, change:: |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1868 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1869 <td tal:condition="request/show/status" |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1870 tal:content="python:i.status.plain() or default"> </td> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1871 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1872 to:: |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1873 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1874 <td tal:condition="request/show/status" |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1875 tal:content="structure i/status/field"> </td> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1876 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1877 this will result in an edit field for the status property. |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1878 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1879 3. after the ``tal:block`` which lists the index items (marked by |
|
2009
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1880 ``tal:repeat="i batch"``) add a new table row:: |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1881 |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1882 <tr> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1883 <td tal:attributes="colspan python:len(request.columns)"> |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1884 <input name="@csrf" type="hidden" |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1885 tal:attributes="value python:utils.anti_csrf_nonce()"> |
|
2009
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1886 <input type="submit" value=" Save Changes "> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1887 <input type="hidden" name="@action" value="edit"> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1888 <tal:block replace="structure request/indexargs_form" /> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1889 </td> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1890 </tr> |
|
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1891 |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1892 which gives us a submit button, indicates that we are performing an |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1893 edit on any changed statuses, and provides a defense against cross |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1894 site request forgery attacks. |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1895 |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1896 The final ``tal:block`` will make sure that the current index view |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1897 parameters (filtering, columns, etc) will be used in rendering the |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1898 next page (the results of the editing). |
|
2009
3594e5d2b411
added new example
Richard Jones <richard@users.sourceforge.net>
parents:
2007
diff
changeset
|
1899 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1900 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1901 Displaying only message summaries in the issue display |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1902 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1903 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1904 Alter the ``issue.item`` template section for messages to:: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1905 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1906 <table class="messages" tal:condition="context/messages"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1907 <tr><th colspan="5" class="header">Messages</th></tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1908 <tr tal:repeat="msg context/messages"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1909 <td><a tal:attributes="href string:msg${msg/id}" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1910 tal:content="string:msg${msg/id}"></a></td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1911 <td tal:content="msg/author">author</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1912 <td class="date" tal:content="msg/date/pretty">date</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1913 <td tal:content="msg/summary">summary</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1914 <td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1915 <a tal:attributes="href string:?@remove@messages=${msg/id}&@action=edit"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1916 remove</a> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1917 </td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1918 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1919 </table> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1920 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1921 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1922 Enabling display of either message summaries or the entire messages |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1923 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1924 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1925 This is pretty simple - all we need to do is copy the code from the |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1926 example `displaying only message summaries in the issue display`_ into |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1927 our template alongside the summary display, and then introduce a switch |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
1928 that shows either the one or the other. We'll use a new form variable, |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1929 ``@whole_messages`` to achieve this:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1930 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1931 <table class="messages" tal:condition="context/messages"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1932 <tal:block tal:condition="not:request/form/@whole_messages/value | python:0"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1933 <tr><th colspan="3" class="header">Messages</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1934 <th colspan="2" class="header"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1935 <a href="?@whole_messages=yes">show entire messages</a> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1936 </th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1937 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1938 <tr tal:repeat="msg context/messages"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1939 <td><a tal:attributes="href string:msg${msg/id}" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1940 tal:content="string:msg${msg/id}"></a></td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1941 <td tal:content="msg/author">author</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1942 <td class="date" tal:content="msg/date/pretty">date</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1943 <td tal:content="msg/summary">summary</td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1944 <td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1945 <a tal:attributes="href string:?@remove@messages=${msg/id}&@action=edit">remove</a> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1946 </td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1947 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1948 </tal:block> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1949 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1950 <tal:block tal:condition="request/form/@whole_messages/value | python:0"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1951 <tr><th colspan="2" class="header">Messages</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1952 <th class="header"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1953 <a href="?@whole_messages=">show only summaries</a> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1954 </th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1955 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1956 <tal:block tal:repeat="msg context/messages"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1957 <tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1958 <th tal:content="msg/author">author</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1959 <th class="date" tal:content="msg/date/pretty">date</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1960 <th style="text-align: right"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1961 (<a tal:attributes="href string:?@remove@messages=${msg/id}&@action=edit">remove</a>) |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1962 </th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1963 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1964 <tr><td colspan="3" tal:content="msg/content"></td></tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1965 </tal:block> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1966 </tal:block> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1967 </table> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1968 |
| 3121 | 1969 |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1970 Setting up a "wizard" (or "druid") for controlled adding of issues |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1971 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1972 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1973 1. Set up the page templates you wish to use for data input. My wizard |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1974 is going to be a two-step process: first figuring out what category |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1975 of issue the user is submitting, and then getting details specific to |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1976 that category. The first page includes a table of help, explaining |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1977 what the category names mean, and then the core of the form:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1978 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1979 <form method="POST" onSubmit="return submit_once()" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1980 enctype="multipart/form-data"> |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1981 <input name="@csrf" type="hidden" |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1982 tal:attributes="value python:utils.anti_csrf_nonce()"> |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1983 <input type="hidden" name="@template" value="add_page1"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1984 <input type="hidden" name="@action" value="page1_submit"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1985 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1986 <strong>Category:</strong> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1987 <tal:block tal:replace="structure context/category/menu" /> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1988 <input type="submit" value="Continue"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1989 </form> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1990 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1991 The next page has the usual issue entry information, with the |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1992 addition of the following form fragments:: |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1993 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1994 <form method="POST" onSubmit="return submit_once()" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1995 enctype="multipart/form-data" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1996 tal:condition="context/is_edit_ok" |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1997 tal:define="cat request/form/category/value"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
1998 |
|
5201
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
1999 <input name="@csrf" type="hidden" |
|
a9ace22e0a2f
issue 2550690 - Adding anti-csrf measures to roundup following
John Rouillard <rouilj@ieee.org>
parents:
5196
diff
changeset
|
2000 tal:attributes="value python:utils.anti_csrf_nonce()"> |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2001 <input type="hidden" name="@template" value="add_page2"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2002 <input type="hidden" name="@required" value="title"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2003 <input type="hidden" name="category" tal:attributes="value cat"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2004 . |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2005 . |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2006 . |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2007 </form> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2008 |
|
3130
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2009 Note that later in the form, I use the value of "cat" to decide which |
|
7308c3c5a943
docs editing from Jean Jordaan
Richard Jones <richard@users.sourceforge.net>
parents:
3127
diff
changeset
|
2010 form elements should be displayed. For example:: |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2011 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2012 <tal:block tal:condition="python:cat in '6 10 13 14 15 16 17'.split()"> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2013 <tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2014 <th>Operating System</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2015 <td tal:content="structure context/os/field"></td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2016 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2017 <tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2018 <th>Web Browser</th> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2019 <td tal:content="structure context/browser/field"></td> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2020 </tr> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2021 </tal:block> |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2022 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2023 ... the above section will only be displayed if the category is one |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2024 of 6, 10, 13, 14, 15, 16 or 17. |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2025 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2026 3. Determine what actions need to be taken between the pages - these are |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2027 usually to validate user choices and determine what page is next. Now encode |
|
7352
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2028 those actions in a new ``Action`` class (see |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2029 `defining new web actions <reference.html#defining-new-web-actions>`_):: |
| 2915 | 2030 |
| 2031 from roundup.cgi.actions import Action | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2032 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2033 class Page1SubmitAction(Action): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2034 def handle(self): |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2035 ''' Verify that the user has selected a category, and then move |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2036 on to page 2. |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2037 ''' |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2038 category = self.form['category'].value |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2039 if category == '-1': |
|
4880
ca692423e401
Different approach to fix XSS in issue2550817
Ralf Schlatterbeck <rsc@runtux.com>
parents:
4790
diff
changeset
|
2040 self.client.add_error_message('You must select a category of report') |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2041 return |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2042 # everything's ok, move on to the next page |
|
4464
c62c0f383e41
Fix incorrect setting of template in customizing.txt example action
Richard Jones <richard@users.sourceforge.net>
parents:
4435
diff
changeset
|
2043 self.client.template = 'add_page2' |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2044 |
| 2915 | 2045 def init(instance): |
| 2046 instance.registerAction('page1_submit', Page1SubmitAction) | |
|
2156
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2047 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2048 4. Use the usual "new" action as the ``@action`` on the final page, and |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2049 you're done (the standard context/submit method can do this for you). |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2050 |
|
d68eeb9d363f
reorg of the (now quite long) examples section and add new example
Richard Jones <richard@users.sourceforge.net>
parents:
2154
diff
changeset
|
2051 |
|
5714
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2052 Silent Submit |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2053 ~~~~~~~~~~~~~ |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2054 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2055 When working on an issue, most of the time the people on the nosy list |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2056 need to be notified of changes. There are cases where a user wants to |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2057 add a comment to an issue and not bother other users on the nosy |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2058 list. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2059 This feature is called Silent Submit because it allows the user to |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2060 silently modify an issue and not tell anyone. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2061 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2062 There are several parts to this change. The main activity part |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2063 involves editing the stock detectors/nosyreaction.py file in your |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2064 tracker. Insert the following lines near the top of the nosyreaction |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2065 function:: |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2066 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2067 # Did user click button to do a silent change? |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2068 try: |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2069 if db.web['submit'] == "silent_change": |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2070 return |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2071 except (AttributeError, KeyError) as err: |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2072 # The web attribute or submit key don't exist. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2073 # That's fine. We were probably triggered by an email |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2074 # or cli based change. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2075 pass |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2076 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2077 This checks the submit button to see if it is the silent type. If there |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2078 are exceptions trying to make that determination they are ignored and |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2079 processing continues. You may wonder how db.web gets set. This is done |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2080 by creating an extension. Add the file extensions/edit.py with |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2081 this content:: |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2082 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2083 from roundup.cgi.actions import EditItemAction |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2084 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2085 class Edit2Action(EditItemAction): |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2086 def handle(self): |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2087 self.db.web = {} # create the dict |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2088 # populate the dict by getting the value of the submit_button |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2089 # element from the form. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2090 self.db.web['submit'] = self.form['submit_button'].value |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2091 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2092 # call the core EditItemAction to process the edit. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2093 EditItemAction.handle(self) |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2094 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2095 def init(instance): |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2096 '''Override the default edit action with this new version''' |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2097 instance.registerAction('edit', Edit2Action) |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2098 |
|
7268
91125d474c1e
doc updates, normalize roundup => Roundup, add links, typo fixes
John Rouillard <rouilj@ieee.org>
parents:
7267
diff
changeset
|
2099 This code is a wrapper for the Roundup EditItemAction. It checks the |
|
5714
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2100 form's submit button to save the value element. The rest of the changes |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2101 needed for the Silent Submit feature involves editing |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2102 html/issue.item.html to add the silent submit button. In |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2103 the stock issue.item.html the submit button is on a line that contains |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2104 "submit button". Replace that line with something like the following:: |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2105 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2106 <input type="submit" name="submit_button" |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2107 tal:condition="context/is_edit_ok" |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2108 value="Submit Changes"> |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2109 <button type="submit" name="submit_button" |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2110 tal:condition="context/is_edit_ok" |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2111 title="Click this to submit but not send nosy email." |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2112 value="silent_change" i18n:translate=""> |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2113 Silent Change</button> |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2114 |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2115 Note the difference in the value attribute for the two submit buttons. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2116 The value "silent_change" in the button specification must match the |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2117 string in the nosy reaction function. |
|
a5f5c044049f
Documentation additions by Tom Ekberg to add example of performing
John Rouillard <rouilj@ieee.org>
parents:
5538
diff
changeset
|
2118 |
|
7352
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2119 Changing How the Core Code Works |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2120 ================================ |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2121 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2122 Example: Changing Cache-Control headers |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2123 --------------------------------------- |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2124 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2125 The Client class in cgi/client.py has a lookup table that is used to |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2126 set the Cache-Control headers for static files. The entries in this |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2127 table are set from interfaces.py using:: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2128 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2129 from roundup.cgi.client import Client |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2130 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2131 Client.Cache_Control['text/css'] = "public, max-age=3600" |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2132 Client.Cache_Control['application/javascript'] = "public, max-age=30" |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2133 Client.Cache_Control['rss.xml'] = "public, max-age=900" |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2134 Client.Cache_Control['local.js'] = "public, max-age=7200" |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2135 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2136 In this case static files delivered using @@file will have cache |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2137 headers set. These files are searched for along the `static_files` |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2138 path in the tracker's `config.ini`. In the example above: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2139 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2140 * a css file (e.g. @@file/style.css) will be cached for an hour |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2141 * javascript files (e.g. @@file/libraries/jquery.js) will be cached |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2142 for 30 seconds |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2143 * a file named rss.xml will be cached for 15 minutes |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2144 * a file named local.js will be cached for 2 hours |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2145 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2146 Note that a file name match overrides the mime type settings. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2147 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2148 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2149 Example: Implement password complexity checking |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2150 ----------------------------------------------- |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2151 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2152 .. index:: tracker; lib directory (example) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2153 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2154 This example uses the zxcvbn_ module that you can place in the zxcvbn |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2155 subdirectory of your tracker's lib directory. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2156 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2157 If you add this to the interfaces.py file in the root directory of |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2158 your tracker (same place as schema.py):: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2159 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2160 import roundup.password as password |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2161 from roundup.exceptions import Reject |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2162 from zxcvbn import zxcvbn |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2163 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2164 # monkey patch the setPassword method with this method |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2165 # that checks password strength. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2166 origPasswordFunc = password.Password.setPassword |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2167 def mpPasswordFunc(self, plaintext, scheme, config=None): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2168 """ Replace the password set function with one that |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2169 verifies that the password is complex enough. It |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2170 has to be done at this point and not in an auditor |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2171 as the auditor only sees the encrypted password. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2172 """ |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2173 results = zxcvbn(plaintext) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2174 if results['score'] < 3: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2175 l = [] |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2176 map(l.extend, [[results['feedback']['warning']], results['feedback']['suggestions']]) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2177 errormsg = " ".join(l) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2178 raise Reject ("Password is too easy to guess. " + errormsg) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2179 return origPasswordFunc(self, plaintext, scheme, config=config) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2180 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2181 password.Password.setPassword = mpPasswordFunc |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2182 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2183 it replaces the setPassword method in the Password class. The new |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2184 version validates that the password is sufficiently complex. Then it |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2185 passes off the setting of password to the original method. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2186 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2187 Example: Enhance time intervals |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2188 ------------------------------- |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2189 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2190 To make the user interface easier to use, you may want to support |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2191 other forms for intervals. For example you can support an interval |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2192 like 1.5 by interpreting it the same as 1:30 (1 hour 30 minutes). |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2193 Also you can allow a bare integer (e.g. 45) as a number of minutes. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2194 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2195 To do this we intercept the from_raw method of the Interval class in |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2196 hyperdb.py with:: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2197 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2198 import roundup.hyperdb as hyperdb |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2199 origFrom_Raw = hyperdb.Interval.from_raw |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2200 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2201 def normalizeperiod(self, value, **kw): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2202 ''' Convert alternate time forms into standard interval format |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2203 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2204 [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2205 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2206 if value is float, it's hour and fractional hours |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2207 if value is integer, it's number of minutes |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2208 ''' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2209 if ":" not in value: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2210 # Not a specified interval |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2211 # if int consider number of minutes |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2212 try: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2213 isMinutes = int(value) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2214 minutes = isMinutes%60 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2215 hours = (isMinutes - minutes) / 60 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2216 value = "%d:%d"%(hours,minutes) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2217 except ValueError: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2218 pass |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2219 # if float, consider it number of hours and fractional hours. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2220 import math |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2221 try: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2222 afterdecimal, beforedecimal = math.modf(float(value)) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2223 value = "%d:%d"%(beforedecimal,60*afterdecimal) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2224 except ValueError: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2225 pass |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2226 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2227 return origFrom_Raw(self, value, **kw) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2228 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2229 hyperdb.Interval.from_raw = normalizeperiod |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2230 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2231 any call to convert an interval from raw form now has two simpler |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2232 (and more friendly) ways to specify common time intervals. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2233 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2234 Example: Modifying the mail gateway |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2235 ----------------------------------- |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2236 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2237 One site receives email on a main gateway. The virtual alias delivery |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2238 table on the postfix server is configured with:: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2239 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2240 test-issues@example.com roundup-test@roundup-vm.example.com |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2241 test-support@example.com roundup-test+support-a@roundup-vm.example.com |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2242 test@support.example.com roundup-test+support-b@roundup-vm.example.com |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2243 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2244 These modifications to the mail gateway for Roundup allows anonymous |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2245 submissions. It hides all of the requesters under the "support" |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2246 user. It also makes some other modifications to the mail parser |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2247 allowing keywords to be set and prefixes to be defined based on the |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2248 delivery alias. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2249 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2250 This is the entry in interfaces.py:: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2251 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2252 import roundup.mailgw |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2253 import email.utils |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2254 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2255 class SupportTracker(object): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2256 def __init__(self, prefix=None, keyword=None): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2257 self.prefix = prefix |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2258 self.keyword = keyword |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2259 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2260 # Define new prefixes and keywords based on local address. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2261 support_trackers = { |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2262 ### production instances ### |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2263 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2264 ### test instances ### |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2265 'roundup-test+support-a': |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2266 SupportTracker(prefix='Support 1', keyword='support1'), |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2267 'roundup-test+support-b': |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2268 SupportTracker(prefix='Support 2', keyword='support2'), |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2269 'roundup-test2+support-a': |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2270 SupportTracker(prefix='Support 1', keyword='support1'), |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2271 'roundup-test2+support-b': |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2272 SupportTracker(prefix='Support 2', keyword='support2'), |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2273 } |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2274 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2275 class parsedMessage(roundup.mailgw.parsedMessage): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2276 def __init__(self, mailgw, message, support_tracker): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2277 roundup.mailgw.parsedMessage.__init__(self, mailgw, message) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2278 if support_tracker.prefix: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2279 self.prefix = '%s: ' % support_tracker.prefix |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2280 else: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2281 self.prefix = '' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2282 self.keywords = [] |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2283 if support_tracker.keyword: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2284 try: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2285 self.keywords = [ |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2286 self.db.keyword.lookup(support_tracker.keyword)] |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2287 except KeyError: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2288 pass |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2289 self.config.ADD_AUTHOR_TO_NOSY = 'no' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2290 self.config.ADD_RECIPIENTS_TO_NOSY = 'no' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2291 self.config.MAILGW_KEEP_QUOTED_TEXT = 'yes' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2292 self.config.MAILGW_LEAVE_BODY_UNCHANGED = 'yes' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2293 self.classname = 'issue' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2294 self.pfxmode = 'loose' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2295 self.sfxmode = 'none' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2296 # set the support user id |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2297 self.fixed_author = self.db.user.lookup('support') |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2298 self.fixed_props = { |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2299 'nosy': [self.fixed_author], |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2300 'keyword': self.keywords, |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2301 } |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2302 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2303 def handle_help(self): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2304 pass |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2305 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2306 def check_subject(self): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2307 if not self.subject: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2308 self.subject = 'no subject' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2309 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2310 def rego_confirm(self): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2311 pass |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2312 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2313 def get_author_id(self): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2314 # force the support user to be the author |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2315 self.author = self.fixed_author |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2316 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2317 def get_props(self): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2318 self.props = {} |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2319 if not self.nodeid: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2320 self.props.update(self.fixed_props) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2321 self.props['title'] = ("%s%s" % ( |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2322 self.prefix, self.subject.replace('[', '(').replace(']', ')'))) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2323 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2324 def get_content_and_attachments(self): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2325 roundup.mailgw.parsedMessage.get_content_and_attachments(self) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2326 if not self.content: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2327 self.content = 'no text' |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2328 intro = [] |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2329 for header in ['From', 'To', 'Cc']: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2330 for addr in self.message.getaddrlist(header): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2331 intro.append('%s: %s' % (header, email.utils.formataddr(addr))) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2332 intro.append('Subject: %s' % self.subject) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2333 intro.append('\n') |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2334 self.content = '\n'.join(intro) + self.content |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2335 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2336 class MailGW(roundup.mailgw.MailGW): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2337 def parsed_message_class(self, mailgw, message): |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2338 support_tracker = None |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2339 # The delivered-to header is unique to postfix |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2340 # it is the target address: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2341 # roundup-test+support-a@roundup-vm.example.com |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2342 # rather than |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2343 # test-support@example.com |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2344 recipients = message.getaddrlist('delivered-to') |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2345 if recipients: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2346 localpart = recipients[0][1].rpartition('@')[0] |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2347 support_tracker = support_trackers.get(localpart) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2348 if support_tracker: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2349 # parse the mesage using the parsedMessage class |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2350 # defined above. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2351 return parsedMessage(mailgw, message, support_tracker) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2352 else: |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2353 # parse the message normally |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2354 return roundup.mailgw.parsedMessage(mailgw, message) |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2355 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2356 This is the most complex example section. The mail gateway is also one |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2357 of the more complex subsystems in Roundup, and modifying it is not |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2358 trivial. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2359 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2360 Other Examples |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2361 -------------- |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2362 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2363 See the `rest interface documentation`_ for instructions on how to add |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2364 new rest endpoints or `change the rate limiting method`_ using interfaces.py. |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2365 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2366 Examples on the Wiki |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2367 ==================== |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2368 |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2369 Even more examples of customization have been contributed by |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2370 users. They can be found on the `wiki |
|
f3c9ba5db30b
split reference out from customizing and fix all links.
John Rouillard <rouilj@ieee.org>
parents:
7336
diff
changeset
|
2371 <https://wiki.roundup-tracker.org>`_. |
|
3548
61d48244e7a8
login may now be for a single session
Richard Jones <richard@users.sourceforge.net>
parents:
3544
diff
changeset
|
2372 |
|
1244
8dd4f736370b
merge from maintenance branch
Richard Jones <richard@users.sourceforge.net>
parents:
1236
diff
changeset
|
2373 .. _`design documentation`: design.html |
|
4325
6ec048310de7
add simple doc about translating customised tracker content
Richard Jones <richard@users.sourceforge.net>
parents:
4300
diff
changeset
|
2374 .. _`developer's guide`: developers.html |
|
5980
54d0080769f9
Support setting cache-control headers for static files
John Rouillard <rouilj@ieee.org>
parents:
5923
diff
changeset
|
2375 .. _`rest interface documentation`: rest.html#programming-the-rest-api |
|
7289
74778ed75aad
Add changing rest rate limiting to interface.py section.
John Rouillard <rouilj@ieee.org>
parents:
7276
diff
changeset
|
2376 .. _change the rate limiting method: rest.html#creating-custom-rate-limits |
|
6160
9619d64c0351
Doc updates for customizing.txt, start of index generation
John Rouillard <rouilj@ieee.org>
parents:
6159
diff
changeset
|
2377 .. _`directions in the rest interface documentation`: rest.html#enabling-the-rest-api |
|
9619d64c0351
Doc updates for customizing.txt, start of index generation
John Rouillard <rouilj@ieee.org>
parents:
6159
diff
changeset
|
2378 .. _`xmlrpc interface documentation`: xmlrpc.html#through-roundup |
|
5980
54d0080769f9
Support setting cache-control headers for static files
John Rouillard <rouilj@ieee.org>
parents:
5923
diff
changeset
|
2379 .. _`zxcvbn`: https://github.com/dwolfhub/zxcvbn-python |
|
6535
47b4391e1503
Fix docs mising Search permission for example. - addition
John Rouillard <rouilj@ieee.org>
parents:
6534
diff
changeset
|
2380 |
