예제 #1
0
 def _do_due(self, name, due):
     milestone = model.Milestone(self.env, name)
     milestone.due = parse_date(due, hint='datetime',
                                locale=get_console_locale(self.env)) \
                     if due else None
     milestone.update()
예제 #2
0
 def _do_completed(self, name, completed):
     milestone = model.Milestone(self.env, name)
     milestone.completed = parse_date(completed, hint='datetime',
                                      locale=get_console_locale(self.env)) \
                           if completed else None
     milestone.update()
예제 #3
0
    def _render_admin_panel(self, req, cat, page, milestone_name):
        perm_cache = req.perm('admin', 'ticket/' + self._type)

        # Detail view
        if milestone_name:
            milestone = model.Milestone(self.env, milestone_name)
            milestone_module = MilestoneModule(self.env)
            if req.method == 'POST':
                if 'save' in req.args:
                    perm_cache.require('MILESTONE_MODIFY')
                    if milestone_module.save_milestone(req, milestone):
                        req.redirect(req.href.admin(cat, page))

                elif 'cancel' in req.args:
                    req.redirect(req.href.admin(cat, page))

            chrome = Chrome(self.env)
            chrome.add_wiki_toolbars(req)
            chrome.add_auto_preview(req)
            data = {
                'view': 'detail',
                'milestone': milestone,
                'default_due': milestone_module.get_default_due(req)
            }

        # List view
        else:
            ticket_default = self.config.get('ticket', 'default_milestone')
            retarget_default = self.config.get('milestone',
                                               'default_retarget_to')
            if req.method == 'POST':

                # Add milestone
                if 'add' in req.args and req.args.get('name'):
                    perm_cache.require('MILESTONE_CREATE')
                    name = req.args.get('name')
                    try:
                        model.Milestone(self.env, name=name)
                    except ResourceNotFound:
                        milestone = model.Milestone(self.env)
                        milestone.name = name
                        MilestoneModule(self.env).save_milestone(
                            req, milestone)
                        req.redirect(req.href.admin(cat, page))
                    else:
                        add_warning(
                            req,
                            _(
                                'Milestone "%(name)s" already '
                                'exists, please choose another '
                                'name.',
                                name=name))

                # Remove milestone
                elif 'remove' in req.args:
                    save = False
                    perm_cache.require('MILESTONE_DELETE')
                    sel = req.args.getlist('sel')
                    if not sel:
                        raise TracError(_("No milestone selected"))
                    with self.env.db_transaction:
                        for name in sel:
                            milestone = model.Milestone(self.env, name)
                            milestone.move_tickets(None, req.authname,
                                                   "Milestone deleted")
                            milestone.delete()
                            if name == ticket_default:
                                self.config.set('ticket', 'default_milestone',
                                                '')
                                save = True
                            if name == retarget_default:
                                self.config.set('milestone',
                                                'default_retarget_to', '')
                                save = True
                    if save:
                        self._save_config(req)
                    add_notice(
                        req, _("The selected milestones have been "
                               "removed."))
                    req.redirect(req.href.admin(cat, page))

                # Set default ticket milestone and retarget milestone
                elif 'apply' in req.args:
                    save = False
                    perm_cache.require('TICKET_ADMIN')
                    name = req.args.get('ticket_default')
                    if name and name != ticket_default:
                        self.log.info(
                            "Setting default ticket "
                            "milestone to %s", name)
                        self.config.set('ticket', 'default_milestone', name)
                        save = True
                    retarget = req.args.get('retarget_default')
                    if retarget and retarget != retarget_default:
                        self.log.info(
                            "Setting default retargeting "
                            "milestone to %s", retarget)
                        self.config.set('milestone', 'default_retarget_to',
                                        retarget)
                        save = True
                    if save:
                        self._save_config(req)
                        req.redirect(req.href.admin(cat, page))

                # Clear default ticket milestone and retarget milestone
                elif 'clear' in req.args:
                    perm_cache.require('TICKET_ADMIN')
                    self.log.info("Clearing default ticket milestone "
                                  "and default retarget milestone")
                    self.config.set('ticket', 'default_milestone', '')
                    self.config.set('milestone', 'default_retarget_to', '')
                    self._save_config(req)
                    req.redirect(req.href.admin(cat, page))

            # Get ticket count
            num_tickets = dict(
                self.env.db_query("""
                    SELECT milestone, COUNT(milestone) FROM ticket
                    WHERE milestone != ''
                    GROUP BY milestone
                """))
            query_href = lambda name: req.href.query([('group', 'status'),
                                                      ('milestone', name)])

            data = {
                'view': 'list',
                'milestones': model.Milestone.select(self.env),
                'query_href': query_href,
                'num_tickets': lambda m: num_tickets.get(m.name, 0),
                'ticket_default': ticket_default,
                'retarget_default': retarget_default
            }

        Chrome(self.env).add_jquery_ui(req)

        data.update({
            'datetime_hint': get_datetime_format_hint(req.lc_time),
        })
        return 'admin_milestones.html', data
예제 #4
0
 def _do_rename(self, name, newname):
     milestone = model.Milestone(self.env, name)
     milestone.name = newname
     milestone.update(author=getuser())
예제 #5
0
파일: admin.py 프로젝트: tutybukuny/trac
 def _do_remove(self, name):
     model.Milestone(self.env, name).delete(author=getuser())
예제 #6
0
 def _do_remove(self, name):
     model.Milestone(self.env, name).delete()
예제 #7
0
파일: admin.py 프로젝트: tutybukuny/trac
 def _do_completed(self, name, completed):
     milestone = model.Milestone(self.env, name)
     milestone.completed = completed and parse_date(completed,
                                                    hint='datetime')
     milestone.update()
예제 #8
0
파일: admin.py 프로젝트: tutybukuny/trac
 def _do_due(self, name, due):
     milestone = model.Milestone(self.env, name)
     milestone.due = due and parse_date(due, hint='datetime')
     milestone.update()
예제 #9
0
파일: admin.py 프로젝트: tutybukuny/trac
 def _do_rename(self, name, newname):
     milestone = model.Milestone(self.env, name)
     milestone.name = newname
     milestone.update()
예제 #10
0
파일: admin.py 프로젝트: tutybukuny/trac
 def _do_add(self, name, due=None):
     milestone = model.Milestone(self.env)
     milestone.name = name
     if due is not None:
         milestone.due = parse_date(due, hint='datetime')
     milestone.insert()
예제 #11
0
파일: admin.py 프로젝트: tutybukuny/trac
    def _render_admin_panel(self, req, cat, page, milestone):
        req.perm.require('MILESTONE_VIEW')

        # Detail view?
        if milestone:
            mil = model.Milestone(self.env, milestone)
            if req.method == 'POST':
                if req.args.get('save'):
                    req.perm.require('MILESTONE_MODIFY')
                    mil.name = name = req.args.get('name')
                    mil.due = mil.completed = None
                    due = req.args.get('duedate', '')
                    if due:
                        mil.due = user_time(req,
                                            parse_date,
                                            due,
                                            hint='datetime')
                    if req.args.get('completed', False):
                        completed = req.args.get('completeddate', '')
                        mil.completed = user_time(req,
                                                  parse_date,
                                                  completed,
                                                  hint='datetime')
                        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', '')
                    try:
                        mil.update()
                    except self.env.db_exc.IntegrityError:
                        raise TracError(
                            _('The milestone "%(name)s" already '
                              'exists.',
                              name=name))
                    add_notice(req, _('Your changes have been saved.'))
                    req.redirect(req.href.admin(cat, page))
                elif req.args.get('cancel'):
                    req.redirect(req.href.admin(cat, page))

            Chrome(self.env).add_wiki_toolbars(req)
            data = {'view': 'detail', 'milestone': mil}

        else:
            default = self.config.get('ticket', 'default_milestone')
            if req.method == 'POST':
                # Add Milestone
                if req.args.get('add') and req.args.get('name'):
                    req.perm.require('MILESTONE_CREATE')
                    name = req.args.get('name')
                    try:
                        mil = model.Milestone(self.env, name=name)
                    except ResourceNotFound:
                        mil = model.Milestone(self.env)
                        mil.name = name
                        if req.args.get('duedate'):
                            mil.due = user_time(req,
                                                parse_date,
                                                req.args.get('duedate'),
                                                hint='datetime')
                        mil.insert()
                        add_notice(
                            req,
                            _('The milestone "%(name)s" has been '
                              'added.',
                              name=name))
                        req.redirect(req.href.admin(cat, page))
                    else:
                        if mil.name is None:
                            raise TracError(_('Invalid milestone name.'))
                        raise TracError(
                            _("Milestone %(name)s already exists.", name=name))

                # Remove milestone
                elif req.args.get('remove'):
                    req.perm.require('MILESTONE_DELETE')
                    sel = req.args.get('sel')
                    if not sel:
                        raise TracError(_('No milestone selected'))
                    if not isinstance(sel, list):
                        sel = [sel]
                    with self.env.db_transaction:
                        for name in sel:
                            mil = model.Milestone(self.env, name)
                            mil.delete(author=req.authname)
                    add_notice(
                        req, _("The selected milestones have been "
                               "removed."))
                    req.redirect(req.href.admin(cat, page))

                # Set default milestone
                elif req.args.get('apply'):
                    name = req.args.get('default')
                    if name and name != default:
                        self.log.info("Setting default milestone to %s", name)
                        self.config.set('ticket', 'default_milestone', name)
                        _save_config(self.config, req, self.log)
                        req.redirect(req.href.admin(cat, page))

            # Get ticket count
            milestones = [(milestone,
                           self.env.db_query(
                               """
                    SELECT COUNT(*) FROM ticket WHERE milestone=%s
                    """, (milestone.name, ))[0][0])
                          for milestone in model.Milestone.select(self.env)]

            data = {
                'view': 'list',
                'milestones': milestones,
                'default': default
            }

        Chrome(self.env).add_jquery_ui(req)

        data.update({
            'datetime_hint': get_datetime_format_hint(req.lc_time),
        })
        return 'admin_milestones.html', data