The 2 calendar notification routes were in auth `none`. This causes no problem, but since they are reimplementing the auth user mecanism, it is better to set them directly in auth `user`. Moreover, they are only called from webclient, when the user is logged. This commit also migrate them to new API (we forgot them ....)
69 lines
3.0 KiB
Python
69 lines
3.0 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import werkzeug
|
|
|
|
from odoo.api import Environment
|
|
import odoo.http as http
|
|
|
|
from odoo.http import request
|
|
from odoo import SUPERUSER_ID
|
|
from odoo import registry as registry_get
|
|
|
|
|
|
class CalendarController(http.Controller):
|
|
|
|
@http.route('/calendar/meeting/accept', type='http', auth="calendar")
|
|
def accept(self, db, token, action, id, **kwargs):
|
|
registry = registry_get(db)
|
|
with registry.cursor() as cr:
|
|
env = Environment(cr, SUPERUSER_ID, {})
|
|
attendee = env['calendar.attendee'].search([('access_token', '=', token), ('state', '!=', 'accepted')])
|
|
if attendee:
|
|
attendee.do_accept()
|
|
return self.view(db, token, action, id, view='form')
|
|
|
|
@http.route('/calendar/meeting/decline', type='http', auth="calendar")
|
|
def declined(self, db, token, action, id):
|
|
registry = registry_get(db)
|
|
with registry.cursor() as cr:
|
|
env = Environment(cr, SUPERUSER_ID, {})
|
|
attendee = env['calendar.attendee'].search([('access_token', '=', token), ('state', '!=', 'declined')])
|
|
if attendee:
|
|
attendee.do_decline()
|
|
return self.view(db, token, action, id, view='form')
|
|
|
|
@http.route('/calendar/meeting/view', type='http', auth="calendar")
|
|
def view(self, db, token, action, id, view='calendar'):
|
|
registry = registry_get(db)
|
|
with registry.cursor() as cr:
|
|
# Since we are in auth=none, create an env with SUPERUSER_ID
|
|
env = Environment(cr, SUPERUSER_ID, {})
|
|
attendee = env['calendar.attendee'].search([('access_token', '=', token)])
|
|
timezone = attendee.partner_id.tz
|
|
event = env['calendar.event'].with_context(tz=timezone).browse(int(id))
|
|
|
|
# If user is logged, redirect to form view of event
|
|
# otherwise, display the simplifyed web page with event informations
|
|
if request.session.uid:
|
|
return werkzeug.utils.redirect('/web?db=%s#id=%s&view_type=form&model=calendar.event' % (db, id))
|
|
|
|
# NOTE : calling render return a lazy response. The rendering result will be done when the
|
|
# cursor will be closed. So it is requried to call `flatten` to make the redering before
|
|
# existing the `with` clause
|
|
response = request.render('calendar.invitation_page_anonymous', {
|
|
'event': event,
|
|
'attendee': attendee,
|
|
})
|
|
response.flatten()
|
|
return response
|
|
|
|
# Function used, in RPC to check every 5 minutes, if notification to do for an event or not
|
|
@http.route('/calendar/notify', type='json', auth="user")
|
|
def notify(self):
|
|
return request.env['calendar.alarm_manager'].get_next_notif()
|
|
|
|
@http.route('/calendar/notify_ack', type='json', auth="user")
|
|
def notify_ack(self, type=''):
|
|
return request.env['res.partner']._set_calendar_last_notif_ack()
|