Server IP : 127.0.0.2 / Your IP : 3.23.59.191 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /opt/odoo/addons/website_event_track/controllers/ |
Upload File : |
# -*- coding: utf-8 -*- # Part of Odoo. See LICENSE file for full copyright and licensing details. import collections import datetime import pytz from odoo import fields, http from odoo.http import request from odoo.tools import html_escape as escape, html2plaintext class WebsiteEventTrackController(http.Controller): @http.route(['''/event/<model("event.event"):event>/track/<model("event.track", "[('event_id','=',event[0])]"):track>'''], type='http', auth="public", website=True) def event_track_view(self, event, track, **post): track = track.sudo() values = {'track': track, 'event': track.event_id, 'main_object': track} return request.render("website_event_track.track_view", values) def _prepare_calendar(self, event, event_track_ids): local_tz = pytz.timezone(event.date_tz or 'UTC') locations = {} # { location: [track, start_date, end_date, rowspan]} dates = [] # [ (date, {}) ] for track in event_track_ids: locations.setdefault(track.location_id or False, []) forcetr = True for track in event_track_ids: start_date = fields.Datetime.from_string(track.date).replace(tzinfo=pytz.utc).astimezone(local_tz) end_date = start_date + datetime.timedelta(hours=(track.duration or 0.5)) location = track.location_id or False locations.setdefault(location, []) # New TR, align all events if forcetr or (start_date>dates[-1][0]) or not location: dates.append((start_date, {}, bool(location))) for loc in locations.keys(): if locations[loc] and (locations[loc][-1][2] > start_date): locations[loc][-1][3] += 1 elif not locations[loc] or locations[loc][-1][2] <= start_date: locations[loc].append([False, locations[loc] and locations[loc][-1][2] or dates[0][0], start_date, 1]) dates[-1][1][loc] = locations[loc][-1] forcetr = not bool(location) # Add event if locations[location] and locations[location][-1][1] > start_date: locations[location][-1][3] -= 1 locations[location].append([track, start_date, end_date, 1]) dates[-1][1][location] = locations[location][-1] return { 'locations': locations, 'dates': dates } @http.route(['''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/agenda'''], type='http', auth="public", website=True) def event_agenda(self, event, tag=None, **post): days_tracks = collections.defaultdict(lambda: []) for track in event.track_ids.sorted(lambda track: (track.date, bool(track.location_id))): if not track.date: continue days_tracks[track.date[:10]].append(track) days = {} days_tracks_count = {} for day, tracks in days_tracks.iteritems(): days_tracks_count[day] = len(tracks) days[day] = self._prepare_calendar(event, tracks) speakers = {} for track in event.sudo().track_ids: speakers_name = u" – ".join(track.speaker_ids.mapped('name')) speakers[track.id] = speakers_name return request.render("website_event_track.agenda", { 'event': event, 'days': days, 'days_nbr': days_tracks_count, 'speakers': speakers, 'tag': tag }) @http.route([ '''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/track''', '''/event/<model("event.event", "[('show_tracks','=',1)]"):event>/track/tag/<model("event.track.tag"):tag>''' ], type='http', auth="public", website=True) def event_tracks(self, event, tag=None, **post): searches = {} if tag: searches.update(tag=tag.id) tracks = event.track_ids.filtered(lambda track: tag in track.tag_ids) else: tracks = event.track_ids values = { 'event': event, 'main_object': event, 'tracks': tracks, 'tags': event.tracks_tag_ids, 'searches': searches, 'html2plaintext': html2plaintext } return request.render("website_event_track.tracks", values) @http.route(['''/event/<model("event.event", "[('show_track_proposal','=',1)]"):event>/track_proposal'''], type='http', auth="public", website=True) def event_track_proposal(self, event, **post): return request.render("website_event_track.event_track_proposal", {'event': event}) @http.route(['/event/<model("event.event"):event>/track_proposal/post'], type='http', auth="public", methods=['POST'], website=True) def event_track_proposal_post(self, event, **post): tags = [] for tag in event.allowed_track_tag_ids: if post.get('tag_' + str(tag.id)): tags.append(tag.id) track = request.env['event.track'].sudo().create({ 'name': post['track_name'], 'partner_name': post['partner_name'], 'partner_email': post['email_from'], 'partner_phone': post['phone'], 'partner_biography': escape(post['biography']), 'event_id': event.id, 'tag_ids': [(6, 0, tags)], 'user_id': False, 'description': escape(post['description']) }) if request.env.user != request.website.user_id: track.sudo().message_subscribe_users(user_ids=request.env.user.ids) else: partner = request.env['res.partner'].sudo().search([('email', '=', post['email_from'])]) if partner: track.sudo().message_subscribe(partner_ids=partner.ids) return request.render("website_event_track.event_track_proposal_success", {'track': track, 'event': event})