[IMP] website_forum: added management and support of private profile (unpublished partners).

This commit is contained in:
Thibault Delavallée 2014-06-12 16:33:33 +02:00
parent 74168c4e9d
commit a3cfed1809
4 changed files with 81 additions and 48 deletions

View File

@ -444,10 +444,10 @@ class WebsiteForum(http.Controller):
User = request.registry['res.users'] User = request.registry['res.users']
step = 30 step = 30
tag_count = User.search(cr, SUPERUSER_ID, [('karma', '>', 1)], count=True, context=context) tag_count = User.search(cr, SUPERUSER_ID, [('karma', '>', 1), ('website_published', '=', True)], count=True, context=context)
pager = request.website.pager(url="/forum/%s/users" % slug(forum), total=tag_count, page=page, step=step, scope=30) pager = request.website.pager(url="/forum/%s/users" % slug(forum), total=tag_count, page=page, step=step, scope=30)
obj_ids = User.search(cr, SUPERUSER_ID, [('karma', '>', 1)], limit=step, offset=pager['offset'], order='karma DESC', context=context) obj_ids = User.search(cr, SUPERUSER_ID, [('karma', '>', 1), ('website_published', '=', True)], limit=step, offset=pager['offset'], order='karma DESC', context=context)
# put the users in block of 3 to display them as a table # put the users in block of 3 to display them as a table
users = [[] for i in range(len(obj_ids)/3+1)] users = [[] for i in range(len(obj_ids)/3+1)]
for index, user in enumerate(User.browse(cr, SUPERUSER_ID, obj_ids, context=context)): for index, user in enumerate(User.browse(cr, SUPERUSER_ID, obj_ids, context=context)):
@ -496,9 +496,9 @@ class WebsiteForum(http.Controller):
Data = request.registry["ir.model.data"] Data = request.registry["ir.model.data"]
user = User.browse(cr, SUPERUSER_ID, user_id, context=context) user = User.browse(cr, SUPERUSER_ID, user_id, context=context)
if not user.exists() or (user_id != request.session.uid and user.karma < 1): values = self._prepare_forum_values(forum=forum, **post)
return werkzeug.utils.redirect("/forum/%s" % slug(forum)) if not user.exists() or (user_id != request.session.uid and (not user.website_published or user.karma < 1)):
return request.website.render("website_forum.private_profile", values)
# questions and answers by user # questions and answers by user
user_questions, user_answers = [], [] user_questions, user_answers = [], []
user_post_ids = Post.search( user_post_ids = Post.search(
@ -549,13 +549,11 @@ class WebsiteForum(http.Controller):
post['users'] = 'True' post['users'] = 'True'
values = self._prepare_forum_values(**post)
values.update({ values.update({
'uid': uid, 'uid': uid,
'user': user, 'user': user,
'main_object': user, 'main_object': user,
'searches': post, 'searches': post,
'forum': forum,
'questions': user_questions, 'questions': user_questions,
'answers': user_answers, 'answers': user_answers,
'followed': followed, 'followed': followed,

View File

@ -9,7 +9,7 @@ class Users(osv.Model):
init_res = super(Users, self).__init__(pool, cr) init_res = super(Users, self).__init__(pool, cr)
self.SELF_WRITEABLE_FIELDS = list(set( self.SELF_WRITEABLE_FIELDS = list(set(
self.SELF_WRITEABLE_FIELDS + \ self.SELF_WRITEABLE_FIELDS + \
['country_id', 'city', 'website', 'website_description'])) ['country_id', 'city', 'website', 'website_description', 'website_published']))
return init_res return init_res
def _get_user_badge_level(self, cr, uid, ids, name, args, context=None): def _get_user_badge_level(self, cr, uid, ids, name, args, context=None):

View File

@ -11,6 +11,24 @@
<field name="signature" position="after"> <field name="signature" position="after">
<field name="karma" string="Forum Karma"/> <field name="karma" string="Forum Karma"/>
</field> </field>
<xpath expr="//div[contains(@class, 'oe_right oe_button_box')]" position="inside">
<br/>
<field name="website_published" class="pull-right" widget="website_button"/>
</xpath>
</field>
</record>
<!-- Update user prefrence form!-->
<record id="view_users_form_simple_modif_forum" model="ir.ui.view">
<field name="name">res.users.preferences.form</field>
<field name="model">res.users</field>
<field name="inherit_id" ref="base.view_users_form_simple_modif"/>
<field name="arch" type="xml">
<group name="preferences" position="before">
<div style="margin-top: 19px;">
<field name="website_published" class="pull-right" widget="website_button"/>
</div>
</group>
</field> </field>
</record> </record>

View File

@ -754,49 +754,63 @@
</t> </t>
</template> </template>
<!--Private profile-->
<template id="private_profile">
<t t-call="website_forum.header">
<h1 class="mt32">This profile is private!</h1>
<p>
<a t-attf-href="/forum/#{slug(forum)}">Return to the question list.</a>
</p>
</t>
</template>
<template id="edit_profile"> <template id="edit_profile">
<t t-call="website_forum.header"> <t t-call="website_forum.header">
<h3>Edit Profile </h3> <h3>Edit Profile
<div class="col-md-2"> <t t-call="website.publish_management">
<img class="img img-responsive img-circle" t-attf-src="/forum/user/#{user.id}/avatar"/> <t t-set="object" t-value="user"/>
</t>
</h3>
<div class="col-md-2">
<img class="img img-responsive img-circle" t-attf-src="/forum/user/#{user.id}/avatar"/>
</div>
<form t-attf-action="/forum/#{slug(forum)}/user/#{slug(user)}/save" method="post" role="form" class="form-horizontal">
<input name="user_id" t-att-value="user.id" type="hidden"/>
<label class="col-md-2 control-label mb16" for="user.name">Real name</label>
<div class="col-md-7 mb16">
<input type="text" class="col-md-7 mb16 form-control" name="name" required="True" t-attf-value="#{user.name}"/>
</div>
<label class="col-md-2 control-label mb16" for="user.partner_id.website">Website</label>
<div class="col-md-7 mb16">
<input type="text" class="form-control" name="website" t-attf-value="#{user.partner_id.website or ''}"/>
</div> </div>
<form t-attf-action="/forum/#{slug(forum)}/user/#{slug(user)}/save" method="post" role="form" class="form-horizontal"> <label class="col-md-4 control-label mb16" for="user.partner_id.email">Email</label>
<input name="user_id" t-att-value="user.id" type="hidden"/> <div class="col-md-7 mb16">
<label class="col-md-2 control-label mb16" for="user.name">Real name</label> <input type="text" class="form-control" name="email" required="True" t-attf-value="#{user.partner_id.email}"/>
<div class="col-md-7 mb16"> </div>
<input type="text" class="col-md-7 mb16 form-control" name="name" required="True" t-attf-value="#{user.name}"/> <label class="col-md-4 control-label mb16" for="user.partner_id.city">City</label>
</div> <div class="col-md-7 mb16">
<label class="col-md-2 control-label mb16" for="user.partner_id.website">Website</label> <input type="text" class="form-control" name="city" t-attf-value="#{user.partner_id.city or ''}"/>
<div class="col-md-7 mb16"> </div>
<input type="text" class="form-control" name="website" t-attf-value="#{user.partner_id.website or ''}"/> <label class="col-md-4 control-label mb16" for="contact_name">Country</label>
</div> <div class="col-md-7 mb16">
<label class="col-md-4 control-label mb16" for="user.partner_id.email">Email</label> <select class="form-control" name="country">
<div class="col-md-7 mb16"> <option value="">Country...</option>
<input type="text" class="form-control" name="email" required="True" t-attf-value="#{user.partner_id.email}"/> <t t-foreach="countries or []" t-as="country">
</div> <option t-att-value="country.id" t-att-selected="country.id == user.partner_id.country_id.id"><t t-esc="country.name"/></option>
<label class="col-md-4 control-label mb16" for="user.partner_id.city">City</label> </t>
<div class="col-md-7 mb16"> </select>
<input type="text" class="form-control" name="city" t-attf-value="#{user.partner_id.city or ''}"/> </div>
</div> <!--Note: using website_description fiels instead of using commnt firld of partner-->
<label class="col-md-4 control-label mb16" for="contact_name">Country</label> <label class="col-md-4 control-label mb16" for="user.partner_id.website_description">Biography</label>
<div class="col-md-7 mb16"> <div class="col-md-7 mb16">
<select class="form-control" name="country"> <textarea name="description" style="min-height: 120px" required="True"
<option value="">Country...</option> class="form-control"><t t-esc="user.partner_id.website_description"/></textarea>
<t t-foreach="countries or []" t-as="country"> </div>
<option t-att-value="country.id" t-att-selected="country.id == user.partner_id.country_id.id"><t t-esc="country.name"/></option> <div class="col-sm-offset-4 col-md-4 mb16">
</t> <button class="btn btn-primary btn-lg">Update</button>
</select> </div>
</div> </form>
<!--Note: using website_description fiels instead of using commnt firld of partner-->
<label class="col-md-4 control-label mb16" for="user.partner_id.website_description">Biography</label>
<div class="col-md-7 mb16">
<textarea name="description" style="min-height: 120px" required="True"
class="form-control"><t t-esc="user.partner_id.website_description"/></textarea>
</div>
<div class="col-sm-offset-4 col-md-4 mb16">
<button class="btn btn-primary btn-lg">Update</button>
</div>
</form>
</t> </t>
</template> </template>
@ -805,6 +819,9 @@
<h1 class="mt0 page-header"> <h1 class="mt0 page-header">
<span t-field="user.name"/> <span t-field="user.name"/>
<small>profile</small> <small>profile</small>
<t t-call="website.publish_management" groups="base.group_website_publisher">
<t t-set="object" t-value="user"/>
</t>
</h1> </h1>
<div class="row"> <div class="row">
<div class="col-sm-2"> <div class="col-sm-2">