diff --git a/addons/event/event.py b/addons/event/event.py index 3c04f5c1baa..1d5bb35a83f 100644 --- a/addons/event/event.py +++ b/addons/event/event.py @@ -211,7 +211,7 @@ class event_event(osv.osv): 'city': fields.related('address_id','city',type='char',string='city'), 'speaker_confirmed': fields.boolean('Speaker Confirmed', readonly=False, states={'done': [('readonly', True)]}), 'country_id': fields.related('address_id', 'country_id', - type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}), + type='many2one', relation='res.country', string='Country', readonly=False, states={'done': [('readonly', True)]}, store=True), 'note': fields.text('Description', readonly=False, states={'done': [('readonly', True)]}), 'company_id': fields.many2one('res.company', 'Company', required=False, change_default=True, readonly=False, states={'done': [('readonly', True)]}), 'is_subscribed' : fields.function(_subscribe_fnc, type="boolean", string='Subscribed'), diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py index 83af820b976..a347f789f7c 100644 --- a/addons/website/controllers/main.py +++ b/addons/website/controllers/main.py @@ -17,30 +17,6 @@ import werkzeug.wrappers logger = logging.getLogger(__name__) -def template_values(): - script = "\n".join(['' % i for i in manifest_list('js', db=request.db)]) - css = "\n".join('' % i for i in manifest_list('css', db=request.db)) - try: - request.session.check_security() - loggued = True - uid = request.session._uid - except http.SessionExpiredException: - loggued = False - uid = openerp.SUPERUSER_ID - - values = { - 'loggued': loggued, - 'editable': loggued, - 'request': request, - 'registry': request.registry, - 'cr': request.cr, - 'uid': uid, - 'script': script, - 'css': css, - 'host_url': request.httprequest.host_url, - } - return values - class Website(openerp.addons.web.controllers.main.Home): @http.route('/', type='http', auth="admin") def index(self, **kw): @@ -52,13 +28,11 @@ class Website(openerp.addons.web.controllers.main.Home): @http.route('/pagenew/', type='http', auth="admin") def pagenew(self, path): - values = template_values() - uid = values['uid'] imd = request.registry['ir.model.data'] view = request.registry['ir.ui.view'] - view_model, view_id = imd.get_object_reference(request.cr, uid, 'website', 'default_page') - newview_id = view.copy(request.cr, uid, view_id) - newview = view.browse(request.cr, uid, newview_id, context={}) + view_model, view_id = imd.get_object_reference(request.cr, request.uid, 'website', 'default_page') + newview_id = view.copy(request.cr, request.uid, view_id) + newview = view.browse(request.cr, request.uid, newview_id, context={}) newview.write({ 'arch': newview.arch.replace("website.default_page", path), 'name': "page/%s" % path @@ -68,7 +42,7 @@ class Website(openerp.addons.web.controllers.main.Home): else: module = False idname = path - imd.create(request.cr, uid, { + imd.create(request.cr, request.uid, { 'name': idname, 'module': module, 'model': 'ir.ui.view', @@ -79,29 +53,14 @@ class Website(openerp.addons.web.controllers.main.Home): @http.route('/page/', type='http', auth="admin") def page(self, path): - #def get_html_head(): - # head += ['' % i for i in manifest_list('css', db=request.db)] - #modules = request.registry.get("ir.module.module").search_read(request.cr, openerp.SUPERUSER_ID, fields=['id', 'shortdesc', 'summary', 'icon_image'], limit=50) - values = template_values() - uid = values['uid'] - context = { - 'inherit_branding': values['editable'], - } - company = request.registry['res.company'].browse(request.cr, uid, 1, context=context) - values.update( - res_company=company, - path=path, - google_map_url="http://maps.googleapis.com/maps/api/staticmap?" + urllib.urlencode({ - 'center': '%s, %s %s, %s' % (company.street, company.city, company.zip, company.country_id and company.country_id.name_get()[0][1] or ''), - 'sensor': 'false', - 'zoom': '8', - 'size': '298x298', - }), - ) + website = request.registry.get("website") + values = website.get_rendering_context({ + 'path': path + }) try: - html = request.registry.get("ir.ui.view").render(request.cr, uid, path, values, context) - except ValueError, e: - html = request.registry.get("ir.ui.view").render(request.cr, uid, 'website.404', values, context) + html = website.render(path, values) + except ValueError: + html = website.render('website.404', values) return html @http.route('/website/attach', type='http', auth='admin') # FIXME: auth diff --git a/addons/website/website.py b/addons/website/website.py index ef2464983ab..ebb66ab6e4c 100644 --- a/addons/website/website.py +++ b/addons/website/website.py @@ -1,6 +1,7 @@ # -*- coding: utf-8 -*- import openerp +from openerp.osv import osv from openerp.addons.web import http from openerp.addons.web.controllers import main from openerp.addons.web.http import request @@ -18,22 +19,36 @@ def auth_method_public(): http.auth_methods['public'] = auth_method_public -class website(object): - def render(self, template, add_values={}): +class website(osv.osv): + _name = "website" # Avoid website.website convention for conciseness (for new api). Got a special authorization from xmo and rco + _description = "Website" + + def get_rendering_context(self, additional_values=None): debug = 'debug' in request.params - script = "\n".join(['' % i for i in main.manifest_list('js', db=request.db, debug=debug)]) - css = "\n".join('' % i for i in main.manifest_list('css', db=request.db, debug=debug)) - _values = { - 'editable': request.uid != request.public_uid, + editable = False + if request.uid or (request.public_uid and request.uid != request.public_uid): + editable = True + values = { + 'debug': debug, + 'editable': editable, 'request': request, 'registry': request.registry, 'cr': request.cr, 'uid': request.uid, - 'script': script, - 'css': css, 'host_url': request.httprequest.host_url, 'res_company': request.registry['res.company'].browse(request.cr, openerp.SUPERUSER_ID, 1), } - _values.update(add_values) - return request.registry.get("ir.ui.view").render(request.cr, request.uid, template, _values) -website = website() + if editable: + values.update({ + 'script': "\n".join(['' % i for i in main.manifest_list('js', db=request.db, debug=debug)]), + 'css': "\n".join('' % i for i in main.manifest_list('css', db=request.db, debug=debug)) + }) + if additional_values: + values.update(additional_values) + return values + + def render(self, template, values={}): + # context = { + # 'inherit_branding': values['editable'], + # } + return request.registry.get("ir.ui.view").render(request.cr, request.uid, template, values) diff --git a/addons/website_crm/controllers/main.py b/addons/website_crm/controllers/main.py index 37e921b029b..83613e108d4 100644 --- a/addons/website_crm/controllers/main.py +++ b/addons/website_crm/controllers/main.py @@ -1,9 +1,7 @@ # -*- coding: utf-8 -*- -import openerp from openerp.addons.web import http from openerp.addons.web.http import request -from openerp.addons.website.controllers.main import template_values from urllib import quote_plus @@ -11,16 +9,14 @@ class contactus(http.Controller): @http.route(['/crm/contactus'], type='http', auth="admin") def contactus(self, *arg, **post): + website = request.registry['website'] post['user_id'] = False request.registry['crm.lead'].create(request.cr, request.uid, post) - values = template_values() - company = request.registry['res.company'].browse(request.cr, request.uid, 1) + values = website.get_rendering_context() + company = values['res_company'] values.update({ - 'res_company': company, 'google_map_url': "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=8&size=298x298" % quote_plus('%s, %s %s, %s' % (company.street, company.city, company.zip, company.country_id and company.country_id.name_get()[0][1] or '')) }) - html = request.registry.get("ir.ui.view").render(request.cr, request.uid, "website_crm.thanks", values) - return html - + return website.render("website_crm.thanks", values) # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/website_event/__openerp__.py b/addons/website_event/__openerp__.py index f871094048a..ad615c092d8 100644 --- a/addons/website_event/__openerp__.py +++ b/addons/website_event/__openerp__.py @@ -8,7 +8,7 @@ OpenERP Blog """, 'author': 'OpenERP SA', - 'depends': ['website', 'event'], + 'depends': ['website', 'event', 'website_sale'], 'data': [ 'views/website_event.xml', 'security/ir.model.access.csv', diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 4d870730f34..3c7c10f0a13 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -1,22 +1,29 @@ # -*- coding: utf-8 -*- +from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request -from openerp.addons.website import website from openerp.tools.translate import _ from datetime import datetime from dateutil.relativedelta import relativedelta from openerp import tools import urllib +import werkzeug -class website_hr(http.Controller): +class website_event(http.Controller): @http.route(['/event'], type='http', auth="public") def events(self, **searches): - data_obj = request.registry['event.event'] + website = request.registry['website'] + event_obj = request.registry['event.event'] + searches.setdefault('date', 'all') + searches.setdefault('type', 'all') + searches.setdefault('country', 'all') + + domain_search = {} def sd(date): return date.strftime(tools.DEFAULT_SERVER_DATETIME_FORMAT) @@ -45,44 +52,67 @@ class website_hr(http.Controller): 0], ] - domain_search = { - 'date': 'all' - } - # search domains for date in dates: if searches.get("date") == date[0]: domain_search["date"] = date[2] + if searches.get("type", "all") != 'all': + domain_search["type"] = [("type", "=", int(searches.get("type")))] + if searches.get("country", "all") != 'all': + domain_search["country"] = [("country_id", "=", int(searches.get("country")))] + + def dom_without(without): + domain = [(1, "=", 1)] + for key, search in domain_search.items(): + if key != without: + domain += search + print domain + return domain # count by domains without self search - domain = [(1, "=", 1)] - for key, search in domain_search.items(): - if key != 'date': - domain += search for date in dates: - date[3] = data_obj.search(request.cr, request.uid, domain + date[2], count=True) + date[3] = event_obj.search(request.cr, request.uid, dom_without('date') + date[2], count=True) + + domain = dom_without('type') + types = event_obj.read_group(request.cr, request.uid, domain, ["id", "type"], groupby="type", orderby="type") + types.insert(0, {'type_count': event_obj.search(request.cr, request.uid, domain, count=True), 'type': ("all", _("All Categories"))}) + + domain = dom_without('country') + countries = event_obj.read_group(request.cr, request.uid, domain, ["id", "country_id"], groupby="country_id", orderby="country_id") + countries.insert(0, {'country_id_count': event_obj.search(request.cr, request.uid, domain, count=True), 'country_id': ("all", _("All Countries"))}) - - # domain and search_path - domain = [(1, "=", 1)] - for key, search in domain_search.items(): - domain += search - - obj_ids = data_obj.search(request.cr, request.uid, domain) - values = { - 'event_ids': data_obj.browse(request.cr, request.uid, obj_ids), + obj_ids = event_obj.search(request.cr, request.uid, dom_without("none"), order="date_begin DESC") + values = website.get_rendering_context({ + 'event_ids': event_obj.browse(request.cr, request.uid, obj_ids), 'dates': dates, + 'types': types, + 'countries': countries, 'searches': searches, 'search_path': "?%s" % urllib.urlencode(searches), - } + }) - html = website.render("website_event.index", values) - return html + return website.render("website_event.index", values) @http.route(['/event/'], type='http', auth="public") def event(self, event_id=None, **post): - return "" + website = request.registry['website'] + event = request.registry['event.event'].browse(request.cr, request.uid, event_id) + organizer = event.user_id and request.registry['res.users'].browse(request.cr, SUPERUSER_ID, event.user_id.id) or None + + values = website.get_rendering_context({ + 'event_id': event, + 'organizer': organizer, + 'google_map_url': "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=12&size=298x298" % urllib.quote_plus('%s, %s %s, %s' % (event.street, event.city, event.zip, event.country_id and event.country_id.name_get()[0][1] or '')) + }) + return website.render("website_event.detail", values) + + @http.route(['/event//add_cart'], type='http', auth="public") + def add_cart(self, event_id=None, **post): + if not post: + return werkzeug.utils.redirect("/event/%s/" % event_id) + + return werkzeug.utils.redirect("/shop/checkout") @http.route(['/event/publish'], type='http', auth="public") def publish(self, **post): diff --git a/addons/website_event/event.py b/addons/website_event/event.py index a1f6b32081a..72ad35a4210 100644 --- a/addons/website_event/event.py +++ b/addons/website_event/event.py @@ -7,5 +7,17 @@ class event(osv.osv): _inherit = 'event.event' _columns = { 'website_published': fields.boolean('Available in the website'), + 'description_website': fields.html('Description for the website'), + 'product_ids': fields.one2many('event.event.product', "event_id", "Event"), } + +class event_product(osv.osv): + _name = 'event.event.product' + _columns = { + 'event_id': fields.many2one('event.event', "Event"), + 'product_id': fields.many2one('product.product', 'Product'), + 'price': fields.float('Price'), + 'qty': fields.integer('Current Registrations', readonly=True), + 'max_qty': fields.integer('Maximum Registrations'), + } diff --git a/addons/website_event/views/website_event.xml b/addons/website_event/views/website_event.xml index e070c1c4f4f..a1797e1ebcb 100644 --- a/addons/website_event/views/website_event.xml +++ b/addons/website_event/views/website_event.xml @@ -2,6 +2,29 @@ + + view_event_form + event.event + + + + + + + + + + + + + + + + + + + + @@ -28,7 +51,7 @@ - + + + \ No newline at end of file diff --git a/addons/website_hr/controllers/main.py b/addons/website_hr/controllers/main.py index cf5d33325bc..968ec607269 100644 --- a/addons/website_hr/controllers/main.py +++ b/addons/website_hr/controllers/main.py @@ -2,21 +2,18 @@ from openerp.addons.web import http from openerp.addons.web.http import request -from openerp.addons.website import website class website_hr(http.Controller): @http.route(['/hr'], type='http', auth="public") def blog(self, **post): + website = request.registry['website'] hr_obj = request.registry['hr.employee'] - employee_ids = hr_obj.search(request.cr, request.uid, [(1, "=", 1)]) - values = { - 'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids), - } - - html = website.render("website_hr.index", values) - return html + values = website.get_rendering_context({ + 'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids) + }) + return website.render("website_hr.index", values) @http.route(['/hr/publish'], type='http', auth="public") def publish(self, **post): diff --git a/addons/website_hr/views/website_hr.xml b/addons/website_hr/views/website_hr.xml index 66c380b176b..59bfb9feb46 100644 --- a/addons/website_hr/views/website_hr.xml +++ b/addons/website_hr/views/website_hr.xml @@ -27,35 +27,31 @@ Team
- -
- diff --git a/addons/website_mail/controllers/main.py b/addons/website_mail/controllers/main.py index 18fceb2ea7c..971934a5d13 100644 --- a/addons/website_mail/controllers/main.py +++ b/addons/website_mail/controllers/main.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- +from openerp import SUPERUSER_ID from openerp.addons.web import http from openerp.addons.web.http import request -from openerp.addons.website import website import werkzeug from openerp.tools.translate import _ from openerp.tools.safe_eval import safe_eval @@ -13,19 +13,28 @@ _months = {1:_("January"), 2:_("February"), 3:_("March"), 4:_("April"), 5:_("May class website_mail(http.Controller): - @http.route(['/blog', '/blog/', '/blog//'], type='http', auth="public") + @http.route(['/blog', '/blog//', '/blog///'], type='http', auth="public") def blog(self, mail_group_id=None, blog_id=None, **post): + website = request.registry['website'] group_obj = request.registry['mail.group'] message_obj = request.registry['mail.message'] + user_obj = request.registry['res.users'] - values = { + values = website.get_rendering_context({ 'blog_ids': None, 'blog_id': None, 'nav_list': dict(), 'prev_date': None, 'next_date': None, 'mail_group_id': mail_group_id, - } + 'subscribe': post.get('subscribe'), + }) + + if request.uid != request.public_uid and mail_group_id: + message_follower_ids = group_obj.read(request.cr, request.uid, [mail_group_id], ['message_follower_ids'])[0]['message_follower_ids'] + parent_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid).partner_id.id + values['subscribe'] = parent_id in message_follower_ids + domain = mail_group_id and [("res_id", "=", mail_group_id)] or [] for group in message_obj.read_group(request.cr, request.uid, domain + group_obj.get_public_blog(request.cr, request.uid), ['subject', 'date'], groupby="date", orderby="create_date asc"): @@ -49,11 +58,8 @@ class website_mail(http.Controller): if blog_id: values['blog_id'] = message_obj.browse(request.cr, request.uid, blog_id) - comment_ids = [child_id.id for child_id in values['blog_id'].child_ids] - values['comments'] = message_obj.read(request.cr, request.uid, comment_ids, ['website_published', 'author_id', 'date', 'body']) - html = website.render("website_mail.index", values) - return html + return website.render("website_mail.index", values) @http.route(['/blog/nav'], type='http', auth="public") def nav(self, **post): @@ -91,9 +97,9 @@ class website_mail(http.Controller): request.session.body = False if post.get('body'): - return '%s/blog/%s/%s' % (url, mail_group_id, blog_id) + return '%s/blog/%s/%s/' % (url, mail_group_id, blog_id) else: - return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) + return werkzeug.utils.redirect("/blog/%s/%s/" % (mail_group_id, blog_id)) @http.route(['/blog//new'], type='http', auth="public") def new_blog_post(self, mail_group_id=None, **post): @@ -105,4 +111,37 @@ class website_mail(http.Controller): subtype='mt_comment', context={'mail_create_nosubsrequest.cribe': True}, ) - return werkzeug.utils.redirect("/blog/%s/%s" % (mail_group_id, blog_id)) + return werkzeug.utils.redirect("/blog/%s/%s/" % (mail_group_id, blog_id)) + + @http.route(['/blog//subscribe', '/blog///subscribe'], type='http', auth="public") + def subscribe(self, mail_group_id=None, blog_id=None, **post): + partner_obj = request.registry['res.partner'] + group_obj = request.registry['mail.group'] + user_obj = request.registry['res.users'] + + if mail_group_id and 'subscribe' in post and (post.get('email') or request.uid != request.public_uid): + if request.uid == request.public_uid: + partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))]) + if not partner_ids: + partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')})] + else: + partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id] + group_obj.message_subscribe(request.cr, request.uid, [mail_group_id], partner_ids) + + return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=post.get('email')) + + @http.route(['/blog//unsubscribe', '/blog///unsubscribe'], type='http', auth="public") + def unsubscribe(self, mail_group_id=None, blog_id=None, **post): + partner_obj = request.registry['res.partner'] + group_obj = request.registry['mail.group'] + user_obj = request.registry['res.users'] + + if mail_group_id and 'unsubscribe' in post and (post.get('email') or request.uid != request.public_uid): + if request.uid == request.public_uid: + partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))]) + else: + partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id] + group_obj.message_unsubscribe(request.cr, request.uid, [mail_group_id], partner_ids) + + return self.blog(mail_group_id=mail_group_id, blog_id=blog_id, subscribe=None) + diff --git a/addons/website_mail/views/website_mail.xml b/addons/website_mail/views/website_mail.xml index 68e51bca55d..3c7a577fe9e 100644 --- a/addons/website_mail/views/website_mail.xml +++ b/addons/website_mail/views/website_mail.xml @@ -18,7 +18,7 @@ -
  • News
  • +
  • News
  • @@ -29,7 +29,7 @@ - News + News @@ -50,20 +50,27 @@
    @@ -73,30 +80,27 @@ Click to Unpublish Click to Publish -

    -
    +

    +
    -
    -
    +
    +
    -
    +