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
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'
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
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
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
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
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
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
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
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