summaryrefslogtreecommitdiff
path: root/addons/website_profile/controllers
diff options
context:
space:
mode:
authorDavid Beguin <dbe@odoo.com>2019-02-15 12:18:17 +0000
committerDavid Beguin <dbe@odoo.com>2019-02-18 15:15:06 +0000
commit2c01452d4b0a2b3907fc703b7bca9acc54e73fcd (patch)
tree0cb71eb86bd9f72851d330bf855a563c09551c24 /addons/website_profile/controllers
parent5125eecce507e6575bed43590af5b4025c0f064c (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.py42
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)