def process_request(self, req): """Process the request. For ClearSilver, return a (template_name, content_type) tuple, where `template` is the ClearSilver template to use (either a `neo_cs.CS` object, or the file name of the template), and `content_type` is the MIME type of the content. For Genshi, return a (template_name, data, content_type) tuple, where `data` is a dictionary of substitutions for the template. For both templating systems, "text/html" is assumed if `content_type` is `None`. Note that if template processing should not occur, this method can simply send the response itself and not return anything. """ # handle image setting if req.method == 'POST': self.set_default_image(req) req.redirect(req.get_header('referer') or req.href(req.path_info)) # GET default image ticket_id, size = self.ticket_id_and_size(req.path_info) image = DefaultTicketImage(self.env).default_image(ticket_id, size) assert image is not None # TODO better images = ImageTrac(self.env).images(ticket_id) attachment = Attachment(self.env, 'ticket', ticket_id, images[image][size]) mimeview = Mimeview(self.env) mimetype = mimeview.get_mimetype(attachment.filename) req.send(attachment.open().read(), mimetype)
def post_process_request(self, req, template, data, content_type): """Do any post-processing the request might need; typically adding values to the template `data` dictionary, or changing template or mime type. `data` may be update in place. Always returns a tuple of (template, data, content_type), even if unchanged. Note that `template`, `data`, `content_type` will be `None` if: - called when processing an error page - the default request handler did not return any result (Since 0.11) """ if template == 'ticket.html': if not 'images' in data: ImageTrac(self.env).post_process_request(req, template, data, content_type) # add galleria if more than one image if len(data['images']) > 1: add_stylesheet(req, 'imagetrac/css/galleria.css') add_script(req, 'imagetrac/js/jquery.galleria.js') add_script(req, 'imagetrac/js/init_galleria.js') return (template, data, content_type)
def default_image(self, ticket_id, size=None): image = get_scalar(self.env, "SELECT image FROM default_image WHERE ticket=%s" % ticket_id) imagetrac = ImageTrac(self.env) images = imagetrac.images(ticket_id) if image: if not size: size = "default" if size in images[image]: return image # find an image that works for i in images: if size: if size in images[i]: return i else: return i
def default_image(self, ticket_id, size=None): image = get_scalar( self.env, "SELECT image FROM default_image WHERE ticket=%s" % ticket_id) imagetrac = ImageTrac(self.env) images = imagetrac.images(ticket_id) if image: if not size: size = 'default' if size in images[image]: return image # find an image that works for i in images: if size: if size in images[i]: return i else: return i
def ticket_id_and_size(self, path_info): imagetrac = ImageTrac(self.env) sizes = imagetrac.sizes().keys() path = path_info.strip('/').split('/') if len(path) == 3: path.append('default') if len(path) != 4: return None if path[0] != 'ticket': return None try: ticket_id = int(path[1]) except ValueError: return None if path[2] != 'image': return None if path[3] not in sizes + [ 'original' ]: return None return (ticket_id, path[3])
def content(self, req, ticket): chrome = Chrome(self.env) template = chrome.load_template('image-sidebar.html') imagetrac = ImageTrac(self.env) if imagetrac: images = imagetrac.images(ticket, req.href) display = 'default' else: image = self.image(ticket) link = req.href('attachment', 'ticket', ticket.id, image, format='raw') images = dict(image=dict(original=link)) display = 'original' # default ticket image default = None if self.env.is_component_enabled(DefaultTicketImage): default = DefaultTicketImage(self.env).default_image(ticket.id) # generate the template return template.generate(display=display, images=images, req=req, default=default, ticket=ticket)