diff --git a/website_cms/controllers/form.py b/website_cms/controllers/form.py index 2985bdb0..bfd5b9cf 100644 --- a/website_cms/controllers/form.py +++ b/website_cms/controllers/form.py @@ -246,3 +246,53 @@ def after_post_action(self, parent=None, main_object=None, **kw): u'in many views (like listing or homepage).'), } self.add_status_message(msg) + + +class ManageMedia(http.Controller, PageFormMixin): + """CMS media manage controller.""" + + form_name = 'manage-media' + form_title = _('Manage media') + form_mode = 'media' + template = 'website_cms.page_media' + status_message_success = { + 'type': 'media', + 'title': 'Media:', + 'msg': _(u'Media updated.'), + } + + def load_defaults(self, main_object, **kw): + """Override to preload values.""" + defaults = {} + if main_object: + defaults['parent_id'] = main_object.id + defaults['form_action'] = \ + main_object.website_url + '/' + self.form_name + defaults[ + 'media_categories'] = request.website.get_media_categories() + defaults['media'] = request.website.get_media( + kw.get('media_categ') and kw.get('media_categ').id + ) + return defaults + + @http.route([ + '/cms/manage-media', + '/cms//manage-media/', + '/cms//manage-media/' + '', + '/cms///manage-media/', + '/cms///manage-media/' + '', + ], type='http', auth='user', methods=['GET', 'POST'], website=True) + def manage(self, parent=None, **kw): + """Handle page add view and form submit.""" + if request.httprequest.method == 'GET': + return self.render(parent, **kw) + + elif request.httprequest.method == 'POST': + self.before_post_action(parent=parent, **kw) + # handle form submission + values = self.load_defaults(parent, **kw) + # TODO: handle errors + _values, errors = self.extract_values(request, parent, **kw) + values.update(_values) diff --git a/website_cms/models/website.py b/website_cms/models/website.py index a31ddcb6..499fc1c4 100644 --- a/website_cms/models/website.py +++ b/website_cms/models/website.py @@ -8,6 +8,7 @@ from openerp.addons.web.http import request from openerp.addons.website.models.website import unslug + from openerp.addons.website_cms.utils import AttrDict import urlparse @@ -147,6 +148,17 @@ def get_media_categories(self, active=True): return self.env['cms.media.category'].search( [('active', '=', active)]) + @api.model + def get_media(self, category_id=None, published=None): + search_args = [] + + if category_id: + search_args.append(('category_id', '=', category_id)) + if published: + search_args.append(('website_published', '=', True)) + + return self.env['cms.media'].search(search_args) + def get_alternate_languages(self, cr, uid, ids, req=None, context=None, main_object=None): @@ -241,3 +253,12 @@ def cms_can_edit(self, main_object=None): is_owner = main_object.create_uid.id == self.env.user.id return is_owner or is_manager return False + + def cms_media_categ_links(self, main_object=None, category=None): + """Retrieve media cms page links""" + if self.is_cms_page(main_object): + url = '%s/manage-media' % main_object.website_url + if category: + url = url + '/%s' % category.public_slug() + return url + return False diff --git a/website_cms/templates/form.xml b/website_cms/templates/form.xml index 81bfd7bb..6622f877 100644 --- a/website_cms/templates/form.xml +++ b/website_cms/templates/form.xml @@ -104,6 +104,17 @@ We load each field explicitely here for now. +
+ + + + + +
@@ -127,4 +138,42 @@ We load each field explicitely here for now. + +