| Index: modules/roundup/templates/statusauditor.py.erb |
| =================================================================== |
| new file mode 100644 |
| --- /dev/null |
| +++ b/modules/roundup/templates/statusauditor.py.erb |
| @@ -0,0 +1,87 @@ |
| +# Copyright (c) 2002 ekit.com Inc (http://www.ekit-inc.com/) |
| +# |
| +# Permission is hereby granted, free of charge, to any person obtaining a copy |
| +# of this software and associated documentation files (the "Software"), to deal |
| +# in the Software without restriction, including without limitation the rights |
| +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| +# copies of the Software, and to permit persons to whom the Software is |
| +# furnished to do so, subject to the following conditions: |
| +# |
| +# The above copyright notice and this permission notice shall be included in |
| +# all copies or substantial portions of the Software. |
| +# |
| +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| +# SOFTWARE. |
| +# |
| +#$Id: statusauditor.py,v 1.5 2004-03-27 00:01:48 richard Exp $ |
| + |
| +def chatty(db, cl, nodeid, newvalues): |
| + ''' If the issue is currently 'unread', 'resolved', 'done-cbb' or None, |
| + then set it to 'chatting' |
| + ''' |
| + # don't fire if there's no new message (ie. chat) |
| + if not newvalues.has_key('messages'): |
| + return |
| + if newvalues['messages'] == cl.get(nodeid, 'messages'): |
| + return |
| + |
| + # get the chatting state ID |
| + try: |
| + chatting_id = db.status.lookup('chatting') |
| + except KeyError: |
| + # no chatting state, ignore all this stuff |
| + return |
| + |
| + # get the current value |
| + current_status = cl.get(nodeid, 'status') |
| + |
| + # see if there's an explicit change in this transaction |
| + if newvalues.has_key('status'): |
| + # yep, skip |
| + return |
| + |
| + # determine the id of 'unread', 'resolved' and 'chatting' |
| + fromstates = [] |
| + for state in 'unread resolved done-cbb'.split(): |
| + try: |
| + fromstates.append(db.status.lookup(state)) |
| + except KeyError: |
| + pass |
| + |
| + # ok, there's no explicit change, so check if we are in a state that |
| + # should be changed |
| + if current_status in fromstates + [None]: |
| + # yep, we're now chatting |
| + newvalues['status'] = chatting_id |
| + |
| + |
| +def presetunread(db, cl, nodeid, newvalues): |
| + ''' Make sure the status is set on new issues |
| + ''' |
| + if newvalues.has_key('status') and newvalues['status']: |
| + return |
| + |
| + # get the unread state ID |
| + try: |
| + unread_id = db.status.lookup('new') |
| + except KeyError: |
| + # no unread state, ignore all this stuff |
| + return |
| + |
| + # ok, do it |
| + newvalues['status'] = unread_id |
| + |
| + |
| +def init(db): |
| + # fire before changes are made |
| + db.issue.audit('set', chatty) |
| + db.issue.audit('create', presetunread) |
| + db.confidential.audit('create', presetunread) |
| + |
| +# vim: set filetype=python ts=4 sw=4 et si |
| +#SHA: 97f4de5b9d06b6be7ea73ba639a48141c80deaf9 |