Project

General

Profile

Download (3.97 KB) Statistics
| Branch: | Tag: | Revision:

root / extra / modules / forms_ui.ptl @ 958b2b8f

1
from quixote import get_request, get_response, get_session, redirect
2
from quixote.directory import Directory, AccessControlled
3

    
4
import wcs
5
import wcs.admin.root
6
from wcs.backoffice.menu import *
7

    
8
from qommon import errors
9
from qommon.form import *
10
from qommon import misc, get_logger
11

    
12
from wcs.formdef import FormDef
13
from wcs.categories import Category
14

    
15
class FormDirectory(Directory):
16
    _q_exports = ['options', 'disable', 'enable']
17

    
18
    def __init__(self, formdef):
19
        self.formdef = formdef
20

    
21
    def enable(self):
22
        self.formdef.disabled = False
23
        self.formdef.store()
24
        return redirect('..')
25

    
26
    def disable(self):
27
        self.formdef.disabled = True
28
        self.formdef.store()
29
        return redirect('..')
30

    
31
    def options [html] (self):
32
        'XXX'
33

    
34

    
35
def is_forms_admin():
36
    user = get_request().user
37
    if not user:
38
        return False
39
    admin_role = get_cfg('aq-permissions', {}).get('forms', None)
40
    if not (user.is_admin or admin_role in (user.roles or [])):
41
        return False
42
    return True
43

    
44

    
45
class FormsDirectory(AccessControlled, Directory):
46
    _q_exports = ['', 'new', 'listing', 'update_order']
47
    label = N_('Forms')
48

    
49
    def _q_access(self):
50
        get_response().breadcrumb.append(('forms/', _('Forms')))
51

    
52
    def _q_index [html] (self):
53
        html_top('forms', _('Forms'))
54

    
55
        session = get_session()
56
        user = get_request().user
57

    
58
        is_admin = is_forms_admin()
59

    
60
        l = []
61
        if user:
62
            for formdef in FormDef.select(order_by='name', ignore_errors=True):
63
                if not formdef.disabled:
64
                    if is_admin or formdef.receiver_id in (user.roles or []):
65
                        l.append(formdef)
66
                elif is_admin:
67
                    l.append(formdef)
68

    
69
        cats = Category.select(order_by = 'name')
70
        lists = []
71
        for c in cats:
72
            t = [x for x in l if x.category_id == c.id]
73
            if t:
74
                lists.append((c.name, t))
75
        t = [x for x in l if x.category_id is None]
76
        if t:
77
            lists.append((None, t))
78

    
79
        if not lists:
80
            raise errors.AccessForbiddenError()
81

    
82
        mid_term = ((len(lists) * 2) + sum([len(x[-1]) for x in lists])) / 2
83
        count = 0
84
        in_second_column = False
85
        '<div class="splitcontent-left">'
86
        for cat_name, formdefs in lists:
87
            if not in_second_column and count > mid_term:
88
                '</div>'
89
                '<div class="splitcontent-right">'
90
            count += 2 + len(formdefs)
91
            if len([x for x in formdefs if not x.disabled]) == 0:
92
                # all forms are disabled, dim the block
93
                '<div class="bo-block dimmed-block">'
94
            else:
95
                '<div class="bo-block">'
96
            if cat_name:
97
                '<h2>%s</h2>' % cat_name
98
            elif len(lists) > 1:
99
                '<h2>%s</h2>' % _('Misc')
100
            '<ul>'
101
            for formdef in formdefs:
102
                '<li>'
103
                if formdef.disabled:
104
                    '<span class="disabled">'
105
                '<a href="../%s/">%s</a>' % (formdef.url_name, formdef.name)
106
                if formdef.disabled:
107
                    '</span>'
108
                if is_forms_admin:
109
                    if formdef.disabled:
110
                        ' (<a href="%s/enable">%s</a>) ' % (formdef.id, _('enable'))
111
                    else:
112
                        ' (<a href="%s/disable">%s</a>) ' % (formdef.id, _('disable'))
113
                    ' (<a href="%s/options" rel="popup">%s</a>)' % (formdef.id, _('options'))
114
                '</li>'
115
            '</ul>'
116
            '</div>'
117
        '</div>'
118

    
119
        get_logger().info('forms backoffice - home')
120

    
121

    
122
    def _q_lookup(self, component):
123
        try:
124
            formdef = FormDef.get(component)
125
        except KeyError:
126
            raise errors.TraversalError()
127
        get_response().breadcrumb.append((str(formdef.id), formdef.name))
128
        return FormDirectory(formdef)
129

    
130
    def listing(self):
131
        return redirect('.')
132

    
(12-12/18)