web/views/idownloadable.py
changeset 5868 c4380d8cfc25
parent 5714 04a8e48f10bc
parent 5866 e676a869a3e9
child 5877 0c7b7b76a84f
equal deleted inserted replaced
5863:4495b9bc49df 5868:c4380d8cfc25
    24 
    24 
    25 from cubicweb.view import EntityView
    25 from cubicweb.view import EntityView
    26 from cubicweb.selectors import (one_line_rset, implements, match_context_prop,
    26 from cubicweb.selectors import (one_line_rset, implements, match_context_prop,
    27                                 adaptable, has_mimetype)
    27                                 adaptable, has_mimetype)
    28 from cubicweb.mttransforms import ENGINE
    28 from cubicweb.mttransforms import ENGINE
    29 from cubicweb.web.box import EntityBoxTemplate
    29 from cubicweb.web import box, httpcache
    30 from cubicweb.web.views import primary, baseviews
    30 from cubicweb.web.views import primary, baseviews
    31 
    31 
    32 
    32 
    33 def download_box(w, entity, title=None, label=None, footer=u''):
    33 def download_box(w, entity, title=None, label=None, footer=u''):
    34     req = entity._cw
    34     req = entity._cw
    44          _('download icon'), xml_escape(label or entity.dc_title())))
    44          _('download icon'), xml_escape(label or entity.dc_title())))
    45     w(u'%s</div>' % footer)
    45     w(u'%s</div>' % footer)
    46     w(u'</div></div>\n')
    46     w(u'</div></div>\n')
    47 
    47 
    48 
    48 
    49 class DownloadBox(EntityBoxTemplate):
    49 class DownloadBox(box.EntityBoxTemplate):
    50     __regid__ = 'download_box'
    50     __regid__ = 'download_box'
    51     # no download box for images
    51     # no download box for images
    52     # XXX primary_view selector ?
    52     # XXX primary_view selector ?
    53     __select__ = (one_line_rset() & match_context_prop()
    53     __select__ = (one_line_rset() & match_context_prop()
    54                   & adaptable('IDownloadable') & ~has_mimetype('image/'))
    54                   & adaptable('IDownloadable') & ~has_mimetype('image/'))
    67     __select__ = one_line_rset() & adaptable('IDownloadable')
    67     __select__ = one_line_rset() & adaptable('IDownloadable')
    68 
    68 
    69     templatable = False
    69     templatable = False
    70     content_type = 'application/octet-stream'
    70     content_type = 'application/octet-stream'
    71     binary = True
    71     binary = True
       
    72     http_cache_manager = httpcache.EntityHTTPCacheManager
    72     add_to_breadcrumbs = False
    73     add_to_breadcrumbs = False
    73 
    74 
    74     def set_request_content_type(self):
    75     def set_request_content_type(self):
    75         """overriden to set the correct filetype and filename"""
    76         """overriden to set the correct filetype and filename"""
    76         entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0)
    77         entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0)
    88     def call(self):
    89     def call(self):
    89         entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0)
    90         entity = self.cw_rset.complete_entity(self.cw_row or 0, self.cw_col or 0)
    90         adapter = entity.cw_adapt_to('IDownloadable')
    91         adapter = entity.cw_adapt_to('IDownloadable')
    91         self.w(adapter.download_data())
    92         self.w(adapter.download_data())
    92 
    93 
       
    94     def last_modified(self):
       
    95         return self.cw_rset.get_entity(self.cw_row or 0, self.cw_col or 0).modification_date
    93 
    96 
    94 class DownloadLinkView(EntityView):
    97 class DownloadLinkView(EntityView):
    95     """view displaying a link to download the file"""
    98     """view displaying a link to download the file"""
    96     __regid__ = 'downloadlink'
    99     __regid__ = 'downloadlink'
    97     __select__ = adaptable('IDownloadable')
   100     __select__ = adaptable('IDownloadable')