Esempio n. 1
0
    def _render_ui(self, req):
        #add_stylesheet(req, 'itteco/css/colorbox/colorbox.css')
        add_stylesheet(req, 'itteco/css/common.css')
        add_stylesheet(req, 'itteco/css/calendar.css')

        add_jscript(
            req, 
            [
                'stuff/ui/ui.core.js',
                'stuff/ui/ui.draggable.js',
                'stuff/ui/ui.droppable.js',
                'stuff/ui/ui.resizable.js',
                'stuff/ui/ui.datepicker.js',
                'stuff/ui/ui.slider.js',
                'stuff/ui/plugins/fullcalendar.js',
                'stuff/ui/plugins/jquery.colorbox.js',
                'stuff/ui/plugins/timepicker.js',
                'stuff/plugins/jquery.rpc.js',
                'calendar.js'
            ],
            IttecoEvnSetup(self.env).debug
        )
    
        icshref = req.href.calendar(format='ics')
        add_link(req, 'alternate', icshref, _('iCalendar'), 'text/calendar', 'ics')

        return 'itteco_calendar_view.html', {}, None
Esempio n. 2
0
    def process_request(self, req):
        req.perm('ticket').require('TICKET_VIEW')
        
        board_type = req.args.get('board_type', 'team_tasks')
        milestone = req.args.get('milestone')
        if board_type == 'chart_settings':
            return self._chart_settings(milestone)
        else:
            board_type = _get_req_param(req, 'board_type', 'team_tasks')
            
            if board_type != req.args.get('board_type'):
                #boardtype was not implicitly  selected, let's restore previos state
                req.redirect(req.href.whiteboard(board_type, milestone))

            add_stylesheet(req, 'common/css/roadmap.css')
            add_stylesheet(req, 'itteco/css/common.css')            
            add_jscript(
                req, 
                [
                    'stuff/ui/ui.core.js',
                    'stuff/ui/ui.draggable.js',
                    'stuff/ui/ui.droppable.js',
                    'stuff/ui/ui.resizable.js',
                    'stuff/ui/plugins/jquery.colorbox.js',
                    'stuff/plugins/jquery.rpc.js',
                    'custom_select.js',
                    'whiteboard2.js'
                ],
                IttecoEvnSetup(self.env).debug
            )
            show_closed_milestones = req.args.get('show_closed_milestones', False)
            
            scope_item, work_item = self._get_wbitems_config(board_type)
            structured_milestones = StructuredMilestone.select(self.env, show_closed_milestones)
            if board_type == 'burndown':
                structured_milestones, _ignore = self._get_milestones_by_level(structured_milestones, 'Sprint', True)
            data ={
                'structured_milestones' : structured_milestones,
                'current_board_type' : board_type,
                'milestone' : milestone,
                'milestone_levels': IttecoEvnSetup(self.env).milestone_levels,
                'stats_config': self._get_stats_config(),
                'show_closed_milestones': show_closed_milestones,
                'wbconfig' : {
                    'rpcurl' : req.href.login("xmlrpc"),
                    'baseurl' : req.href(),
                    'workitem' : work_item,
                    'scopeitem': scope_item,
                    'groups': self.ticket_groups,
                    'transitions': self.transitions
                },
                'team' : self.team_members_provider and self.team_members_provider.get_team_members() or [],
                'ticket_types' : work_item['types'] or []
            }
                
            return 'itteco_whiteboard2.html', data, 'text/html'
Esempio n. 3
0
 def process_request(self, req):
     if req.method=='POST' and ('preview' not in req.args) and req.args.get('id'):
         id = int(req.args.get('id'))
         ticket = Ticket(self.env, id)
         if ticket.exists:
             def get_ids(req, attr_name):
                 ids = req.args.get(attr_name, [])
                 return isinstance(ids, basestring) and (ids,) or ids
                 
             links = TicketLinks(self.env, ticket)
             links.outgoing_links = [int(id) for id in get_ids(req, 'ticket_links')]
             links.wiki_links = get_ids(req, 'wiki_links')
             links.save()
     template, data, content_type = req.args['original_handler'].process_request(RedirectInterceptor(req, self._get_jump_to_url))
     if template == 'ticket.html':
         add_jscript(
             req, 
             [
                 'stuff/plugins/jquery.rpc.js',
                 'references.js'
             ],
             IttecoEvnSetup(self.env).debug
         )
         tkt = data['ticket']
         links = TicketLinks(self.env, tkt)
         data['filters']=self._get_search_filters(req)
         data['ticket_links'] = {
             'incoming' : {
                 'title':'Referred by:',
                 'blockid':'inblock', 
                 'removable': False, 
                 'links': self._ids_to_tickets(links.incoming_links)
             },
             'outgoing' : {
                 'title':'Refers to:', 
                 'blockid':'outblock', 
                 'removable': True, 
                 'links': self._ids_to_tickets(links.outgoing_links)
             },
             'wiki' : links.wiki_links
         }
         
         data['jump_to'] = req.args.get('jump_to') or referer_module(req)
         
         return 'itteco_ticket.html', data, content_type
     return template, data, content_type
Esempio n. 4
0
    def process_request(self, req):
        if req.method == 'POST' and ('preview'
                                     not in req.args) and req.args.get('id'):
            id = int(req.args.get('id'))
            ticket = Ticket(self.env, id)
            if ticket.exists:

                def get_ids(req, attr_name):
                    ids = req.args.get(attr_name, [])
                    return isinstance(ids, basestring) and (ids, ) or ids

                links = TicketLinks(self.env, ticket)
                links.outgoing_links = [
                    int(id) for id in get_ids(req, 'ticket_links')
                ]
                links.wiki_links = get_ids(req, 'wiki_links')
                links.save()
        template, data, content_type = req.args[
            'original_handler'].process_request(
                RedirectInterceptor(req, self._get_jump_to_url))
        if template == 'ticket.html':
            add_jscript(req, ['stuff/plugins/jquery.rpc.js', 'references.js'],
                        IttecoEvnSetup(self.env).debug)
            tkt = data['ticket']
            links = TicketLinks(self.env, tkt)
            data['filters'] = self._get_search_filters(req)
            data['ticket_links'] = {
                'incoming': {
                    'title': 'Referred by:',
                    'blockid': 'inblock',
                    'removable': False,
                    'links': self._ids_to_tickets(links.incoming_links)
                },
                'outgoing': {
                    'title': 'Refers to:',
                    'blockid': 'outblock',
                    'removable': True,
                    'links': self._ids_to_tickets(links.outgoing_links)
                },
                'wiki': links.wiki_links
            }

            data['jump_to'] = req.args.get('jump_to') or referer_module(req)

            return 'itteco_ticket.html', data, content_type
        return template, data, content_type
Esempio n. 5
0
    def post_process_request(self, req, template, data, content_type):
        self.env.log.debug(
            'post_process_request req=%s, pathinfo=%s, args=%s' %
            (req, req.path_info, req.args))
        if req.path_info.startswith('/ticket/') \
            or req.path_info.startswith('/newticket') \
            or req.path_info.startswith('/milestone') \
            or req.path_info.startswith('/roadmap'):

            #add_stylesheet(req, 'itteco/css/common.css')
            add_jscript(req, [
                'stuff/ui/ui.core.js', 'stuff/ui/ui.resizable.js',
                'stuff/ui/ui.draggable.js', 'stuff/ui/ui.droppable.js',
                'custom_select.js'
            ],
                        IttecoEvnSetup(self.env).debug)

        return template, data, content_type
Esempio n. 6
0
    def post_process_request(self, req, template, data, content_type):
        self.env.log.debug('post_process_request req=%s, pathinfo=%s, args=%s' % (req, req.path_info, req.args))
        if req.path_info.startswith('/ticket/') \
            or req.path_info.startswith('/newticket') \
            or req.path_info.startswith('/milestone') \
            or req.path_info.startswith('/roadmap'):
            
            #add_stylesheet(req, 'itteco/css/common.css')
            add_jscript(
                req, 
                [
                    'stuff/ui/ui.core.js',
                    'stuff/ui/ui.resizable.js',
                    'stuff/ui/ui.draggable.js',
                    'stuff/ui/ui.droppable.js',
                    'custom_select.js'
                ],
                IttecoEvnSetup(self.env).debug
            )

        return template, data, content_type
Esempio n. 7
0
    def _render_ui(self, req):
        #add_stylesheet(req, 'itteco/css/colorbox/colorbox.css')
        add_stylesheet(req, 'itteco/css/common.css')
        add_stylesheet(req, 'itteco/css/calendar.css')

        add_jscript(req, [
            'stuff/ui/ui.core.js', 'stuff/ui/ui.draggable.js',
            'stuff/ui/ui.droppable.js', 'stuff/ui/ui.resizable.js',
            'stuff/ui/ui.datepicker.js', 'stuff/ui/ui.slider.js',
            'stuff/ui/plugins/fullcalendar.js',
            'stuff/ui/plugins/jquery.colorbox.js',
            'stuff/ui/plugins/timepicker.js', 'stuff/plugins/jquery.rpc.js',
            'calendar.js'
        ],
                    IttecoEvnSetup(self.env).debug)

        icshref = req.href.calendar(format='ics')
        add_link(req, 'alternate', icshref, _('iCalendar'), 'text/calendar',
                 'ics')

        return 'itteco_calendar_view.html', {}, None
Esempio n. 8
0
 def _add_tickets_report_data(self, milestone, req, data):
     tickets_report = MilestoneSystem(self.env).tickets_report
     if tickets_report:
         req.args['MILESTONE'] = milestone.name
         req.args['id']=tickets_report
         report_data = IttecoReportModule(self.env).get_report_data(req, tickets_report)
         self.env.log.debug('report_data="%s"' % (report_data,))
         data.update(report_data)
         
         debug = IttecoEvnSetup(self.env).debug
         
         add_jscript(req, 'stuff/plugins/jquery.rpc.js', debug)
         add_jscript(req, 'stuff/ui/plugins/jquery.jeditable.js', debug)
         add_jscript(req, 'stuff/ui/ui.core.js', debug)
         add_jscript(req, 'stuff/ui/ui.draggable.js', debug)
         add_jscript(req, 'stuff/ui/ui.droppable.js', debug)
         add_jscript(req, 'editable_report.js', debug)
         add_jscript(req, 'report.js', debug)
         #add_stylesheet(req, 'itteco/css/report.css')
         data['fields_config'] = IttecoReportModule(self.env).fields_dict(data.get('header_groups',[]))
     data['render_report'] = tickets_report or None
Esempio n. 9
0
    def _add_tickets_report_data(self, milestone, req, data):
        tickets_report = MilestoneSystem(self.env).tickets_report
        if tickets_report:
            req.args['MILESTONE'] = milestone.name
            req.args['id'] = tickets_report
            report_data = IttecoReportModule(self.env).get_report_data(
                req, tickets_report)
            self.env.log.debug('report_data="%s"' % (report_data, ))
            data.update(report_data)

            debug = IttecoEvnSetup(self.env).debug

            add_jscript(req, 'stuff/plugins/jquery.rpc.js', debug)
            add_jscript(req, 'stuff/ui/plugins/jquery.jeditable.js', debug)
            add_jscript(req, 'stuff/ui/ui.core.js', debug)
            add_jscript(req, 'stuff/ui/ui.draggable.js', debug)
            add_jscript(req, 'stuff/ui/ui.droppable.js', debug)
            add_jscript(req, 'editable_report.js', debug)
            add_jscript(req, 'report.js', debug)
            #add_stylesheet(req, 'itteco/css/report.css')
            data['fields_config'] = IttecoReportModule(self.env).fields_dict(
                data.get('header_groups', []))
        data['render_report'] = tickets_report or None
Esempio n. 10
0
    def _render_admin_panel(self, req, cat, page, milestone):
        req.perm.require('TICKET_ADMIN')
        add_stylesheet(req, 'itteco/css/common.css')
        add_jscript(
            req, 
            [
                'stuff/ui/ui.core.js',
                'stuff/ui/ui.resizable.js',
                'custom_select.js'
            ],
            IttecoEvnSetup(self.env).debug
        )
        # Detail view?
        if milestone:
            mil = StructuredMilestone(self.env, milestone)
            if req.method == 'POST':
                if req.args.get('save'):
                    mil.name = req.args.get('name')
                    mil.due = mil.completed = None
                    due = req.args.get('duedate', '')
                    if due:
                        mil.due = parse_date(due, req.tz)
                    if req.args.get('completed', False):
                        completed = req.args.get('completeddate', '')
                        mil.completed = parse_date(completed, req.tz)
                        if mil.completed > datetime.now(utc):
                            raise TracError(_('Completion date may not be in '
                                              'the future'),
                                            _('Invalid Completion Date'))
                    mil.description = req.args.get('description', '')
                    mil.parent = req.args.get('parent', None)
                    if mil.parent and mil.parent==mil.name:
                        raise TracError(_('Milestone cannot be parent for itself,Please, give it another thought.'),
                                        _('Something is wrong with Parent Milestone. Will you check it please?'))

                    if mil.parent and not StructuredMilestone(self.env, mil.parent).exists:
                        raise TracError(_('Milestone should have a valid parent. It does not look like this is the case.'),
                                        _('Something is wrong with Parent Milestone. Will you check it please?'))
                    mil.update()
                    req.redirect(req.href.admin(cat, page))
                elif req.args.get('cancel'):
                    req.redirect(req.href.admin(cat, page))

            add_script(req, 'common/js/wikitoolbar.js')
            data = {'view': 'detail', 'milestone': mil}

        else:
            if req.method == 'POST':
                # Add Milestone
                if req.args.get('add') and req.args.get('name'):
                    name = req.args.get('name')
                    try:
                        StructuredMilestone(self.env, name)
                    except ResourceNotFound:
                        mil = StructuredMilestone(self.env)
                        mil.name = name
                        if req.args.get('duedate'):
                            mil.due = parse_date(req.args.get('duedate'),
                                                 req.tz)
                        mil.parent = req.args.get('parent', None)
                        if mil.parent and not StructuredMilestone(self.env, mil.parent).exists:
                            raise TracError(_('Milestone should have a valid parent. It does not look like this is the case'),
                                            _('Something is wrong with Parent Milestone. Will you check it please?'))

                        mil.insert()
                        req.redirect(req.href.admin(cat, page))
                    else:
                        raise TracError(_('Sorry, milestone %s already exists.') % name)

                # Remove milestone
                elif req.args.get('remove'):
                    sel = req.args.get('sel')
                    if not sel:
                        raise TracError(_('Please, select the milestone.'))
                    if not isinstance(sel, list):
                        sel = [sel]
                    db = self.env.get_db_cnx()
                    for name in sel:
                        mil = StructuredMilestone(self.env, name, db=db)
                        mil.delete(db=db)
                    db.commit()
                    req.redirect(req.href.admin(cat, page))

                # Set default milestone
                elif req.args.get('apply'):
                    if req.args.get('default'):
                        name = req.args.get('default')
                        self.config.set('ticket', 'default_milestone', name)
                        self.config.save()
                        req.redirect(req.href.admin(cat, page))

            data = {
                'view': 'list',
                'default': self.config.get('ticket', 'default_milestone'),
            }
            
        # Get ticket count
        db = self.env.get_db_cnx()
        cursor = db.cursor()
        milestones = []
        structured_milestones = StructuredMilestone.select(self.env)
        mil_names = self._get_mil_names(structured_milestones)
        
        cursor.execute("SELECT milestone, COUNT(*) FROM ticket "
                   "WHERE milestone IN (%s) GROUP BY milestone" % ("%s,"*len(mil_names))[:-1], mil_names)
        mil_tkt_quantity = {}
        for mil, cnt in cursor:
            mil_tkt_quantity[mil]=cnt

        data.update({
            'date_hint': get_date_format_hint(),
            'milestones': [(mil, 0) for mil in structured_milestones],# we recover this anyway
            'structured_milestones': structured_milestones,
            'milestone_tickets_quantity': mil_tkt_quantity,
            'max_milestone_level': self.milestone_levels and len(self.milestone_levels)-1 or 0,
            'datetime_hint': get_datetime_format_hint()
        })
        return 'itteco_admin_milestones.html', data