diff options
| author | David Beguin <dbe@odoo.com> | 2019-02-15 12:18:17 +0000 |
|---|---|---|
| committer | David Beguin <dbe@odoo.com> | 2019-02-18 15:15:06 +0000 |
| commit | 2c01452d4b0a2b3907fc703b7bca9acc54e73fcd (patch) | |
| tree | 0cb71eb86bd9f72851d330bf855a563c09551c24 /addons/website_profile/controllers | |
| parent | 5125eecce507e6575bed43590af5b4025c0f064c (diff) | |
[IMP] website(_profile,_forum,_survey) : redesign website all_users page
As the eLearning (website_slides) is also using website_profile users,
the All Users page is moved from website_forum to website_profile, to be
useable in both forum and eLearning.
This page displays also the number of karma point, badges and certificates
of each user.
The users are sorted by their karma points and the first 3 users are
promoted on a podium.
Use span instead of b tag in profile page
Task ID : 1922159
PR #31109
Diffstat (limited to 'addons/website_profile/controllers')
| -rw-r--r-- | addons/website_profile/controllers/main.py | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/addons/website_profile/controllers/main.py b/addons/website_profile/controllers/main.py index c0d6a278a0b..ec587f59eca 100644 --- a/addons/website_profile/controllers/main.py +++ b/addons/website_profile/controllers/main.py @@ -189,3 +189,45 @@ class WebsiteProfile(http.Controller): 'badges': badges, }) return request.render("website_profile.badge_main", values) + + # All Users Page + # --------------------------------------------------- + def _prepare_all_users_values(self, user, position): + return { + 'position': position, + 'id': user.id, + 'name': user.name, + 'rank': user.rank_id.name, + 'karma': user.karma, + 'badge_count': len(user.badge_ids), + } + + @http.route(['/profile/users', + '/profile/users/page/<int:page>'], type='http', auth="public", website=True) + def view_all_users_page(self, page=1, **searches): + User = request.env['res.users'] + dom = [('karma', '>', 1), ('website_published', '=', True)] + + # Get the Top 3 users + top3_users = User.sudo().search(dom, limit=3, order='karma DESC') + top3_user_values = [self._prepare_all_users_values(user, position+1) for position, user in enumerate(top3_users)] + + # Get the other users + if top3_users: + dom += [('id', 'not in', top3_users.ids)] + step = 30 + user_count = User.sudo().search_count(dom) + pager = request.website.pager(url="/profile/users", total=user_count, page=page, step=step, scope=step) + + if searches.get('user'): + dom += [('name', 'ilike', searches.get('user'))] + + users = User.sudo().search(dom, limit=step, offset=pager['offset'], order='karma DESC') + + user_values = [self._prepare_all_users_values(user, position + 4 + ((page-1) * step)) for position, user in enumerate(users)] + values = { + 'top3_users': top3_user_values, + 'users': user_values, + 'pager': pager + } + return request.render("website_profile.users_page_main", values) |
