[FIX] w_profile: don't call _get_users_karma_position without users
Before this commit, if you was searching something that return no results, you will call the sql query generating an error syntax: Traceback: ERROR: syntax error at or near ")" LINE 8: WHERE sub.id IN () Now, we don't make more useless query if we know that there are no users. + preventive fix the call of this method without user_ids This commit is related to #14667 closes odoo/odoo#33715 Signed-off-by: Jérémy Kersten (jke) <jke@openerp.com>
This commit is contained in:
@@ -219,27 +219,35 @@ class WebsiteProfile(http.Controller):
|
||||
dom = expression.AND([['|', ('name', 'ilike', search_term), ('company_id.name', 'ilike', search_term)], dom])
|
||||
|
||||
user_count = User.sudo().search_count(dom)
|
||||
page_count = math.ceil(user_count / self._users_per_page)
|
||||
pager = request.website.pager(url="/profile/users", total=user_count, page=page, step=self._users_per_page,
|
||||
scope=page_count if page_count < self._pager_max_pages else self._pager_max_pages)
|
||||
|
||||
users = User.sudo().search(dom, limit=self._users_per_page, offset=pager['offset'], order='karma DESC')
|
||||
user_values = [self._prepare_all_users_values(user) for user in users]
|
||||
if user_count:
|
||||
page_count = math.ceil(user_count / self._users_per_page)
|
||||
pager = request.website.pager(url="/profile/users", total=user_count, page=page, step=self._users_per_page,
|
||||
scope=page_count if page_count < self._pager_max_pages else self._pager_max_pages)
|
||||
|
||||
# Get karma position for users (only website_published)
|
||||
position_domain = [('karma', '>', 1), ('website_published', '=', True)]
|
||||
position_map = self._get_users_karma_position(position_domain, users.ids)
|
||||
for user in user_values:
|
||||
user['position'] = position_map.get(user['id'], 0)
|
||||
users = User.sudo().search(dom, limit=self._users_per_page, offset=pager['offset'], order='karma DESC')
|
||||
user_values = [self._prepare_all_users_values(user) for user in users]
|
||||
|
||||
# Get karma position for users (only website_published)
|
||||
position_domain = [('karma', '>', 1), ('website_published', '=', True)]
|
||||
position_map = self._get_users_karma_position(position_domain, users.ids)
|
||||
for user in user_values:
|
||||
user['position'] = position_map.get(user['id'], 0)
|
||||
|
||||
values = {
|
||||
'top3_users': user_values[:3] if not search_term and page == 1 else None,
|
||||
'users': user_values[3:] if not search_term and page == 1 else user_values,
|
||||
'pager': pager
|
||||
}
|
||||
else:
|
||||
values = {'top3_users': [], 'users': [], 'pager': dict(page_count=0)}
|
||||
|
||||
values = {
|
||||
'top3_users': user_values[:3] if not search_term and page == 1 else None,
|
||||
'users': user_values[3:] if not search_term and page == 1 else user_values,
|
||||
'pager': pager
|
||||
}
|
||||
return request.render("website_profile.users_page_main", values)
|
||||
|
||||
def _get_users_karma_position(self, domain, user_ids):
|
||||
if not user_ids:
|
||||
return {}
|
||||
|
||||
Users = request.env['res.users']
|
||||
where_query = Users._where_calc(domain)
|
||||
Users._apply_ir_rules(where_query, 'read')
|
||||
|
||||
@@ -478,11 +478,14 @@
|
||||
<t t-call="website_profile.top3_user_card"></t>
|
||||
</div>
|
||||
</div>
|
||||
<table class="table table-sm">
|
||||
<table class="table table-sm" t-if='users'>
|
||||
<tr t-foreach="users" t-as="user" t-attf-onclick="location.href='/profile/user/#{user['id']}';" class="o_wprofile_pointer bg-white">
|
||||
<t t-call="website_profile.all_user_card"/>
|
||||
</tr>
|
||||
</table>
|
||||
<t else=''>
|
||||
<div class='alert alert-warning'>No results matched</div>
|
||||
</t>
|
||||
<div class="form-inline justify-content-center">
|
||||
<t t-call="website_profile.pager_nobox"/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user