diff --git a/.bzrignore b/.bzrignore deleted file mode 100644 index 86a1881981f..00000000000 --- a/.bzrignore +++ /dev/null @@ -1,15 +0,0 @@ -.* -*.egg-info -*.orig -*.vim -build/ -RE:^bin/ -RE:^dist/ -RE:^include/ - -RE:^share/ -RE:^man/ -RE:^lib/ - -RE:^addons/\w+/doc/_build/ -RE:^.*?/node_modules diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000000..4b38dc02ac7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# sphinx build directories +_build/ + +# dotfiles +.* +# compiled python files +*.py[co] +# setup.py egg_info +*.egg-info +# emacs backup files +*~ +# hg stuff +*.orig +status + +# generated for windows installer? +install/win32/*.bat +install/win32/meta.py + +# various virtualenv +/bin/ +/build/ +/dist/ +/include/ +/lib/ +/man/ +/share/ +/src/ \ No newline at end of file diff --git a/addons/website/models/ir_http.py b/addons/website/models/ir_http.py index 91b998c76c9..62b6fa319e0 100644 --- a/addons/website/models/ir_http.py +++ b/addons/website/models/ir_http.py @@ -126,6 +126,7 @@ class ir_http(orm.AbstractModel): return response def _handle_exception(self, exception=None, code=500): + res = super(ir_http, self)._handle_exception(exception) if isinstance(exception, werkzeug.exceptions.HTTPException) and hasattr(exception, 'response') and exception.response: return exception.response @@ -168,7 +169,7 @@ class ir_http(orm.AbstractModel): html = request.website._render('website.http_error', values) return werkzeug.wrappers.Response(html, status=code, content_type='text/html;charset=utf-8') - return super(ir_http, self)._handle_exception(exception) + return res class ModelConverter(ir.ir_http.ModelConverter): def __init__(self, url_map, model=False, domain='[]'): diff --git a/addons/website/models/ir_qweb.py b/addons/website/models/ir_qweb.py index ad2b63a6dd9..0e1fe2beb89 100644 --- a/addons/website/models/ir_qweb.py +++ b/addons/website/models/ir_qweb.py @@ -15,6 +15,7 @@ import urllib2 import urlparse import re +import werkzeug.urls import werkzeug.utils from dateutil import parser from lxml import etree, html @@ -265,10 +266,19 @@ class Image(orm.AbstractModel): if options is None: options = {} classes = ['img', 'img-responsive'] + options.get('class', '').split() - return ir_qweb.HTMLSafe('' % ( + url_params = { + 'model': record._model._name, + 'field': field_name, + 'id': record.id, + } + for options_key in ['max_width', 'max_height']: + if options.get(options_key): + url_params[options_key] = options[options_key] + + return ir_qweb.HTMLSafe('' % ( ' '.join(itertools.imap(werkzeug.utils.escape, classes)), - record._model._name, - field_name, record.id)) + werkzeug.urls.url_encode(url_params) + )) local_url_re = re.compile(r'^/(?P[^]]+)/static/(?P.+)$') def from_html(self, cr, uid, model, column, element, context=None): diff --git a/addons/website/models/website.py b/addons/website/models/website.py index e0aac6dbbbf..9828e9aa39d 100644 --- a/addons/website/models/website.py +++ b/addons/website/models/website.py @@ -555,8 +555,10 @@ class website(osv.osv): if record.get(presized): response.data = data return response - - fit = int(max_width), int(max_height) + try: + fit = int(max_width), int(max_height) + except TypeError: + fit = (maxint, maxint) w, h = image.size max_w, max_h = fit diff --git a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml index 6d5b93793ad..0dd5616070b 100644 --- a/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml +++ b/addons/website_crm_partner_assign/views/website_crm_partner_assign.xml @@ -86,8 +86,8 @@
diff --git a/addons/website_event_track/controllers/event.py b/addons/website_event_track/controllers/event.py index 712c168e1db..e24aee7e62d 100644 --- a/addons/website_event_track/controllers/event.py +++ b/addons/website_event_track/controllers/event.py @@ -88,10 +88,21 @@ class website_event(http.Controller): days_tracks_count[day] = len(tracks) days[day] = self._prepare_calendar(event, tracks) + cr, uid, context = request.cr, request.uid, request.context + track_obj = request.registry['event.track'] + tracks_ids = track_obj.search(cr, openerp.SUPERUSER_ID, [('event_id', '=', event.id)], context=context) + speakers = dict() + for t in track_obj.browse(cr, openerp.SUPERUSER_ID, tracks_ids, context=context): + acc = "" + for speaker in t.speaker_ids: + acc = speaker.name + u" – " + acc if acc else speaker.name + speakers[t.id] = acc + return request.website.render("website_event_track.agenda", { 'event': event, 'days': days, 'days_nbr': days_tracks_count, + 'speakers': speakers, 'tag': tag }) diff --git a/addons/website_event_track/views/website_event.xml b/addons/website_event_track/views/website_event.xml index 45531ef73b0..3cea1b35599 100644 --- a/addons/website_event_track/views/website_event.xml +++ b/addons/website_event_track/views/website_event.xml @@ -85,8 +85,8 @@ -
- +
+
@@ -98,11 +98,11 @@ -
-
- -
+
+
+ +
diff --git a/addons/website_mail/models/mail_message.py b/addons/website_mail/models/mail_message.py index 1e50611fa00..cff950f2962 100644 --- a/addons/website_mail/models/mail_message.py +++ b/addons/website_mail/models/mail_message.py @@ -34,7 +34,7 @@ class MailMessage(osv.Model): res[message.id] = message.subject else: plaintext_ct = html2plaintext(message.body) - res[message.id] = plaintext_ct + '%s' % (' [...]' if len(plaintext_ct) >= 20 else '') + res[message.id] = plaintext_ct[:30] + '%s' % (' [...]' if len(plaintext_ct) >= 30 else '') return res _columns = { diff --git a/addons/website_mail_group/controllers/main.py b/addons/website_mail_group/controllers/main.py index 88eb1a7e9b7..7320ebc6548 100644 --- a/addons/website_mail_group/controllers/main.py +++ b/addons/website_mail_group/controllers/main.py @@ -9,13 +9,14 @@ from openerp.addons.web.http import request class MailGroup(http.Controller): - _thread_per_page = 10 + _thread_per_page = 20 + _replies_per_page = 10 def _get_archives(self, group_id): MailMessage = request.registry['mail.message'] groups = MailMessage.read_group( request.cr, request.uid, [('model', '=', 'mail.group'), ('res_id', '=', group_id)], ['subject', 'date'], - groupby="date", orderby="date asc", context=request.context) + groupby="date", orderby="date desc", context=request.context) for group in groups: begin_date = datetime.datetime.strptime(group['__domain'][0][2], tools.DEFAULT_SERVER_DATETIME_FORMAT).date() end_date = datetime.datetime.strptime(group['__domain'][1][2], tools.DEFAULT_SERVER_DATETIME_FORMAT).date() @@ -27,7 +28,7 @@ class MailGroup(http.Controller): def view(self, **post): cr, uid, context = request.cr, request.uid, request.context group_obj = request.registry.get('mail.group') - group_ids = group_obj.search(cr, uid, [], context=context) + group_ids = group_obj.search(cr, uid, [('alias_id', '!=', False), ('alias_id.alias_name', '!=', False)], context=context) values = {'groups': group_obj.browse(cr, uid, group_ids, context)} return request.website.render('website_mail_group.mail_groups', values) @@ -73,6 +74,7 @@ class MailGroup(http.Controller): 'archives': self._get_archives(group.id), 'date_begin': date_begin, 'date_end': date_end, + 'replies_per_page': self._replies_per_page, } return request.website.render('website_mail_group.group_messages', values) @@ -81,11 +83,49 @@ class MailGroup(http.Controller): ], type='http', auth="public", website=True) def thread_discussion(self, group, message, mode='thread', date_begin=None, date_end=None, **post): cr, uid, context = request.cr, request.uid, request.context + Message = request.registry['mail.message'] + if mode == 'thread': + base_domain = [('model', '=', 'mail.group'), ('res_id', '=', group.id), ('parent_id', '=', message.parent_id and message.parent_id.id or False)] + else: + base_domain = [('model', '=', 'mail.group'), ('res_id', '=', group.id)] + next_message = None + next_message_ids = Message.search(cr, uid, base_domain + [('date', '<', message.date)], order="date DESC", limit=1, context=context) + if next_message_ids: + next_message = Message.browse(cr, uid, next_message_ids[0], context=context) + prev_message = None + prev_message_ids = Message.search(cr, uid, base_domain + [('date', '>', message.date)], order="date ASC", limit=1, context=context) + if prev_message_ids: + prev_message = Message.browse(cr, uid, prev_message_ids[0], context=context) values = { 'message': message, 'group': group, 'mode': mode, + 'archives': self._get_archives(group.id), 'date_begin': date_begin, 'date_end': date_end, + 'replies_per_page': self._replies_per_page, + 'next_message': next_message, + 'prev_message': prev_message, } return request.website.render('website_mail_group.group_message', values) + + @http.route( + '''/groups// - - - -