|
4083
|
1 #
|
|
|
2 # Copyright (C) 2009 Stefan Seefeld
|
|
|
3 # All rights reserved.
|
|
|
4 # For license terms see the file COPYING.txt.
|
|
|
5 #
|
|
|
6
|
|
|
7 from roundup.exceptions import *
|
|
|
8 from roundup import hyperdb
|
|
|
9 from roundup.i18n import _
|
|
|
10
|
|
|
11 class Action:
|
|
|
12 def __init__(self, db, translator):
|
|
|
13 self.db = db
|
|
|
14 self.translator = translator
|
|
|
15
|
|
|
16 def handle(self, *args):
|
|
|
17 """Action handler procedure"""
|
|
|
18 raise NotImplementedError
|
|
|
19
|
|
|
20 def execute(self, *args):
|
|
|
21 """Execute the action specified by this object."""
|
|
|
22
|
|
|
23 self.permission(*args)
|
|
|
24 return self.handle(*args)
|
|
|
25
|
|
|
26
|
|
|
27 def permission(self, *args):
|
|
|
28 """Check whether the user has permission to execute this action.
|
|
|
29
|
|
|
30 If not, raise Unauthorised."""
|
|
|
31
|
|
|
32 pass
|
|
|
33
|
|
|
34
|
|
|
35 def gettext(self, msgid):
|
|
|
36 """Return the localized translation of msgid"""
|
|
|
37 return self.translator.gettext(msgid)
|
|
|
38
|
|
|
39
|
|
|
40 _ = gettext
|
|
|
41
|
|
|
42
|
|
|
43 class Retire(Action):
|
|
|
44
|
|
|
45 def handle(self, designator):
|
|
|
46
|
|
|
47 classname, itemid = hyperdb.splitDesignator(designator)
|
|
|
48
|
|
|
49 # make sure we don't try to retire admin or anonymous
|
|
|
50 if (classname == 'user' and
|
|
|
51 self.db.user.get(itemid, 'username') in ('admin', 'anonymous')):
|
|
|
52 raise ValueError, self._(
|
|
|
53 'You may not retire the admin or anonymous user')
|
|
|
54
|
|
|
55 # do the retire
|
|
|
56 self.db.getclass(classname).retire(itemid)
|
|
|
57 self.db.commit()
|
|
|
58
|
|
|
59
|
|
|
60 def permission(self, designator):
|
|
|
61
|
|
|
62 classname, itemid = hyperdb.splitDesignator(designator)
|
|
|
63
|
|
|
64 if not self.db.security.hasPermission('Edit', self.db.getuid(),
|
|
|
65 classname=classname, itemid=itemid):
|
|
|
66 raise Unauthorised(self._('You do not have permission to '
|
|
4125
|
67 'retire the %(classname)s class.')%classname)
|
|
4083
|
68
|