equal
deleted
inserted
replaced
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') |