Esempio n. 1
0
    def _process_read(self, req, page_param):
        ticket_type = req.args.get('type')

        ticket_types = [{
            'name': type.name,
            'value': type.value,
            'selected': (type.name == ticket_type)
        } for type in ticket.Type.select(self.env)]

        # if type isn't selected, it uses the first element.
        if ticket_type == None:
            ticket_type = (ticket_types[0])['name']

        template_api = TicketTemplate()
        ticket_template = template_api.get_template_field(
            self.env, ticket_type)

        # check enable customfield
        customfields_api = CustomFields(self.env)
        customfields = customfields_api.get_custom_fields(self.env)
        enable_list = ticket_template['enablefields'].split(',')
        for cf in customfields:
            cf['enable'] = False
            for field in enable_list:
                if (field.strip() == cf['name']):
                    cf['enable'] = True
                    break

        page_param['types'] = ticket_types
        page_param['template'] = ticket_template['template']
        page_param['enablefields'] = ticket_template['enablefields']
        page_param['customfields'] = customfields
Esempio n. 2
0
    def _process_read(self, req, page_param):
        ticket_type = req.args.get('type')

        ticket_types = [{
            'name':
            type.name,
            'value':
            type.value,
            'selected': (type.name == ticket_type),
            'hidden':
            ','.join(set(getattr(self, type.name + '_fields')))
        } for type in ticket.Type.select(self.env)]

        if ticket_type is None:
            ticket_type = (ticket_types[0])['name']

        custom_fields_api = CustomFields(self.env)
        page_param['types'] = ticket_types
        standard_fields = []
        custom_fields = []
        for f in TicketSystem(self.env).get_ticket_fields():
            if f.get('custom'):
                custom_fields.append(f)
            else:
                standard_fields.append(f)
        custom_fields = [
            f for f in custom_fields if f['name'] not in self.forced_fields
        ]
        standard_fields = [
            f for f in standard_fields if f['name'] not in self.forced_fields
        ]
        page_param['customfields'] = custom_fields
        page_param['standardfields'] = standard_fields
        page_param['forcedfields'] = self.forced_fields
Esempio n. 3
0
    def _process_read(self, req):
        add_script(req, 'ticketext/jquery.js')
        add_script(req, 'ticketext/ticketext.js')
        footer = req.hdf['project.footer'] + '\n<script type="text/javascript">'\
                                           + 'TicketTemplate.initialize(\'' + req.base_path + '\');'\
                                           + '</script>\n'
        req.hdf['project.footer'] = Markup(footer)

        ticket_type = req.args.get('type')

        ticket_types = [{
            'name': type.name,
            'value': type.value,
            'selected': (type.name == ticket_type)
        } for type in ticket.Type.select(self.env)]

        # if type isn't selected, it uses the first element.
        if ticket_type == None:
            ticket_type = (ticket_types[0])['name']

        template_api = TicketTemplate(self.env)
        ticket_template = template_api.get_template_field(ticket_type)

        # check enable customfield
        customfields_api = CustomFields(self.env)
        customfields = customfields_api.get_custom_fields(self.env)
        enable_list = ticket_template['enablefields'].split(',')
        for cf in customfields:
            cf['enable'] = False
            for field in enable_list:
                if field.strip() == unicode(cf['name'], 'utf-8'):
                    cf['enable'] = True
                    break

        req.hdf['ticketext.template'] = {
            'types': ticket_types,
            'template': ticket_template['template'],
            'enablefields': ticket_template['enablefields'],
            'customfields': customfields
        }
Esempio n. 4
0
 def setUp(self):
     self.env = EnvironmentStub()
     self.cf_api = CustomFields(self.env)
Esempio n. 5
0
 def setUp(self):
     self.env = EnvironmentStub()
     ps = PermissionSystem(self.env)
     ps.grant_permission('admin', 'TICKET_ADMIN')
     self.plugin = CustomFieldAdminPage(self.env)
     self.api = CustomFields(self.env)
Esempio n. 6
0
    def render_admin_panel(self, req, cat, page, customfield):
        req.perm('admin', 'ticket/customfields').require('TICKET_ADMIN')

        add_script(req, 'customfieldadmin/js/customfieldadmin.js')

        def _customfield_from_req(self, req):
            cfield = {'name': req.args.get('name','').encode('utf-8'),
                      'label': req.args.get('label','').encode('utf-8'),
                      'type': req.args.get('type','').encode('utf-8'),
                      'value': req.args.get('value','').encode('utf-8'),
                      'options': [x.strip().encode('utf-8') for x in \
                                    req.args.get('options','').split("\n")],
                      'cols': req.args.get('cols','').encode('utf-8'),
                      'rows': req.args.get('rows','').encode('utf-8'),
                      'order': req.args.get('order', '').encode('utf-8'),
                      'format': req.args.get('format', '').encode('utf-8')}
            return cfield

        cf_api = CustomFields(self.env)
        cf_admin = {}  # Return values for template rendering

        # Detail view?
        if customfield:
            cfield = None
            for a_cfield in cf_api.get_custom_fields():
                if a_cfield['name'] == customfield:
                    cfield = a_cfield
                    break
            if not cfield:
                raise TracError(
                    _("Custom field %(name)s does not exist.",
                      name=customfield))
            if req.method == 'POST':
                if req.args.get('save'):
                    cfield.update(_customfield_from_req(self, req))
                    cf_api.update_custom_field(cfield)
                    req.redirect(req.href.admin(cat, page))
                elif req.args.get('cancel'):
                    req.redirect(req.href.admin(cat, page))
            if cfield.has_key('options'):
                optional_line = ''
                if cfield.get('optional', False):
                    optional_line = "\n\n"
                cfield['options'] = optional_line + "\n".join(
                    cfield['options'])
            cf_admin['cfield'] = cfield
            cf_admin['cf_display'] = 'detail'
        else:
            if req.method == 'POST':
                # Add Custom Field
                if req.args.get('add') and req.args.get('name'):
                    cfield = _customfield_from_req(self, req)
                    cf_api.update_custom_field(cfield, create=True)
                    req.redirect(req.href.admin(cat, page))

                # Remove Custom Field
                elif req.args.get('remove') and req.args.get('sel'):
                    sel = req.args.get('sel')
                    sel = isinstance(sel, list) and sel or [sel]
                    if not sel:
                        raise TracError(_("No custom field selected"))
                    for name in sel:
                        cfield = {'name': name}
                        cf_api.delete_custom_field(cfield)
                    req.redirect(req.href.admin(cat, page))

                elif req.args.get('apply'):
                    # Change order
                    order = dict([(key[6:], req.args.get(key))
                                  for key in req.args.keys()
                                  if key.startswith('order_')])
                    cfields = cf_api.get_custom_fields()
                    for current_cfield in cfields:
                        new_order = order.get(current_cfield['name'], 0)
                        if new_order:
                            current_cfield['order'] = new_order
                            cf_api.update_custom_field(current_cfield)
                    req.redirect(req.href.admin(cat, page))

            cfields = []
            orders_in_use = []
            for item in cf_api.get_custom_fields():
                item['href'] = req.href.admin(cat, page, item['name'])
                item['registry'] = ('ticket-custom',
                                    item['name']) in Option.registry
                cfields.append(item)
                orders_in_use.append(int(item.get('order')))
            cf_admin['cfields'] = cfields
            cf_admin['cf_display'] = 'list'
            if sorted(orders_in_use) != range(1, len(cfields) + 1):
                add_warning(req, _("Custom Fields are not correctly sorted. " \
                         "This may affect appearance when viewing tickets."))

        return ('customfieldadmin.html', cf_admin)
Esempio n. 7
0
 def __init__(self):
     # Init CustomFields so translations work from first request
     # FIXME: It actually only works from SECOND request - Trac bug?!
     CustomFields(self.env)