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)
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
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')
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
def getVersions( self, component, req ): versions = [] for v in Version.select(component.env) : versions.append(v.name) return versions
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))
def resource_exists(self, resource): try: Version(self.env, resource.id) return Version.exists except ResourceNotFound: return False