Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
 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])
Ejemplo n.º 6
0
    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)