Esempio n. 1
0
    def process_request(self, req):
        version_id = req.args.get('id')
        req.perm('version', version_id).require('VERSION_VIEW')

        db = self.env.get_db_cnx()
        version = Version(self.env, version_id, db)
        action = req.args.get('action', 'view')

        if req.method == 'POST':
            if req.args.has_key('cancel'):
                if version.exists:
                    req.redirect(req.href.version(version.name))
                else:
                    req.redirect(req.href.versions())
            elif action == 'edit':
                return self._do_save(req, db, version)
            elif action == 'delete':
                self._do_delete(req, db, version)
        elif action in ('new', 'edit'):
            return self._render_editor(req, db, version)
        elif action == 'delete':
            return self._render_confirm(req, db, version)

        if not version.name:
            req.redirect(req.href.versions())

        add_stylesheet(req, 'common/css/roadmap.css')
        return self._render_view(req, db, version)
Esempio n. 2
0
    def process_request(self, req):
        req.perm.require('VERSION_VIEW')

        showall = req.args.get('show') == 'all'

        versions = []
        resources = []
        is_released = []
        for v in Version.select(self.env):
            r = Resource('version', v.name)
            ir = v.time and v.time.date() < date.today()

            # apply more visibiity
            if (showall or not ir) and 'VERSION_VIEW' in req.perm(r):
                versions.append(v)
                resources.append(r)
                is_released.append(v.time and v.time.date() < date.today())

        versions.reverse(),
        resources.reverse(),
        is_released.reverse(),

        data = {
            'versions': versions,
            'resources': resources,
            'is_released': is_released,
            'showall': showall,
        }
        add_stylesheet(req, 'common/css/roadmap.css')
        return 'versions.html', data, None
Esempio n. 3
0
 def _render_link(self, context, name, label, extra=''):
     try:
         version = Version(self.env, name)
     except TracError:
         version = None
     # Note: the above should really not be needed, `Milestone.exists`
     # should simply be false if the milestone doesn't exist in the db
     # (related to #4130)
     href = context.href.version(name)
     if version and version.exists:
         resource = Resource('version', name)
         if 'VERSION_VIEW' in context.perm(resource):
             return tag.a(label, class_='version', href=href + extra)
     elif 'VERSION_CREATE' in context.perm('version', name):
         return tag.a(label, class_='missing version', href=href + extra,
                      rel='nofollow')
     return tag.a(label, class_='missing version')
Esempio n. 4
0
    def _render_editor(self, req, db, version):
        resource = Resource('version', version.name)
        data = {
            'version': version,
            'resource': resource,
            'versions': [ver.name for ver in Version.select(self.env)],
            'datetime_hint': get_datetime_format_hint(),
            'version_groups': [],
        }

        if version.exists:
            req.perm(resource).require('VERSION_MODIFY')
            #versions = [m for m in Version.select(self.env, db=db)
            #              if m.name != version.name
            #              and 'VERSION_VIEW' in req.perm(m.resource)]
        else:
            req.perm(resource).require('VERSION_CREATE')

        if parse_version(trac_version) >= parse_version('1.0'):
            Chrome(self.env).add_jquery_ui(req)
        Chrome(self.env).add_wiki_toolbars(req)
        return 'version_edit.html', data, None
Esempio n. 5
0
 def getVersions( self, component, req ):
     versions = []
     for v in Version.select(component.env) :
         versions.append(v.name)
     return versions
Esempio n. 6
0
    def _do_save(self, req, db, version):
        resource = Resource('version', version.name)
        if version.exists:
            req.perm(resource).require('VERSION_MODIFY')
        else:
            req.perm(resource).require('VERSION_CREATE')

        old_name = version.name
        new_name = req.args.get('name')

        version.name = new_name
        version.description = req.args.get('description', '')

        time = req.args.get('time', '')

        # Instead of raising one single error, check all the constraints and
        # let the user fix them by going back to edit mode showing the warnings
        warnings = []

        def warn(msg):
            add_warning(req, msg)
            warnings.append(msg)

        # -- check the name
        if new_name:
            if new_name != old_name:
                # check that the version doesn't already exists
                # FIXME: the whole .exists business needs to be clarified
                #        (#4130) and should behave like a WikiPage does in
                #        this respect.
                try:
                    other_version = Version(self.env, new_name, db)
                    warn(_('Version "%(name)s" already exists, please '
                           'choose another name', name=new_name))
                except ResourceNotFound:
                    pass
        else:
            warn(_('You must provide a name for the version.'))

        # -- check completed date
        if 'time' in req.args:
            time = time and parse_date(time, req.tz) or None
        else:
            time = None
        version.time = time

        if warnings:
            return self._render_editor(req, db, version)

        # -- actually save changes
        if version.exists:
            if version.name != version._old_name:
                # Update tickets
                cursor = db.cursor()
                cursor.execute("UPDATE milestone_version SET version=%s WHERE version=%s",
                               (version.name, version._old_name))
            version.update(db)
        else:
            version.insert(db)
        db.commit()

        req.redirect(req.href.version(version.name))
Esempio n. 7
0
 def resource_exists(self, resource):
     try:
         Version(self.env, resource.id)
         return Version.exists
     except ResourceNotFound:
         return False