diff --git a/addons/website_forum_doc/controllers/main.py b/addons/website_forum_doc/controllers/main.py index a34e8eef2a1..6817a7e5ef0 100644 --- a/addons/website_forum_doc/controllers/main.py +++ b/addons/website_forum_doc/controllers/main.py @@ -1,23 +1,19 @@ # -*- coding: utf-8 -*- -from openerp import http -from openerp.http import request -from openerp.addons.website.models.website import slug +from odoo import http +from odoo.http import request class WebsiteDoc(http.Controller): @http.route(['/forum/how-to', '/forum/how-to/'], type='http', auth="public", website=True) def toc(self, toc=None, **kwargs): - cr, uid, context, toc_id = request.cr, request.uid, request.context, False if toc: sections = toc.child_ids forum = toc.forum_id else: - toc_obj = request.registry['forum.documentation.toc'] - obj_ids = toc_obj.search(cr, uid, [('parent_id', '=', False)], context=context) - sections = toc_obj.browse(cr, uid, obj_ids, context=context) - forum = sections and sections[0].forum_id or False + sections = request.env['forum.documentation.toc'].search([('parent_id', '=', False)], limit=1) + forum = sections and sections.forum_id value = { 'toc': toc, 'main_object': toc or forum, @@ -29,7 +25,7 @@ class WebsiteDoc(http.Controller): @http.route(['''/forum/how-to///question//promote', type='http', auth="user", website=True) def post_toc(self, forum, post, **kwargs): - cr, uid, context, toc_id = request.cr, request.uid, request.context, False - user = request.registry['res.users'].browse(cr, uid, uid, context=context) - assert user.karma >= 200, 'You need 200 karma to promote a post to the documentation' - toc_obj = request.registry['forum.documentation.toc'] - obj_ids = toc_obj.search(cr, uid, [], context=context) - tocs = toc_obj.browse(cr, uid, obj_ids, context=context) + assert request.env.user.karma >= 200, 'You need 200 karma to promote a post to the documentation' value = { 'post': post, 'forum': post.forum_id, - 'chapters': filter(lambda x: not x.child_ids, tocs) + 'chapters': request.env['forum.documentation.toc'].search([('child_ids', '=', False)]) } return request.website.render("website_forum_doc.promote_question", value) @http.route('/forum//promote_ok', type='http', auth="user", website=True) def post_toc_ok(self, forum, post_id, toc_id, **kwargs): - cr, uid, context = request.cr, request.uid, request.context - user = request.registry['res.users'].browse(cr, uid, uid, context=context) - assert user.karma >= 200, 'Not enough karma, you need 200 to promote a documentation.' - - toc_obj = request.registry['forum.documentation.toc'] - stage_ids = toc_obj.search(cr, uid, [], limit=1, context=context) - - post_obj = request.registry['forum.post'] - post_obj.write(cr, uid, [int(post_id)], { + assert request.env.user.karma >= 200, 'Not enough karma, you need 200 to promote a documentation.' + stage = request.env['forum.documentation.toc'].search([], limit=1) + request.env['forum.post'].browse(int(post_id)).write({ 'documentation_toc_id': toc_id and int(toc_id) or False, - 'documentation_stage_id': stage_ids and stage_ids[0] or False - }, context=context) - return request.redirect('/forum/'+str(forum.id)+'/question/'+str(post_id)) + 'documentation_stage_id': stage and stage.id + }) + return request.redirect('/forum/' + str(forum.id) + '/question/' + str(post_id)) diff --git a/addons/website_forum_doc/data/doc_data.xml b/addons/website_forum_doc/data/doc_data.xml index d9a6566d908..14992afeccb 100644 --- a/addons/website_forum_doc/data/doc_data.xml +++ b/addons/website_forum_doc/data/doc_data.xml @@ -1,5 +1,5 @@ - + @@ -45,4 +45,4 @@ - + diff --git a/addons/website_forum_doc/data/doc_demo.xml b/addons/website_forum_doc/data/doc_demo.xml index 0b98c483782..a1a21191274 100644 --- a/addons/website_forum_doc/data/doc_demo.xml +++ b/addons/website_forum_doc/data/doc_demo.xml @@ -1,6 +1,5 @@ - - + @@ -88,5 +87,4 @@ - - + diff --git a/addons/website_forum_doc/models/forum_documentation_toc.py b/addons/website_forum_doc/models/forum_documentation_toc.py index 9f36c178c48..fc167f1ed80 100644 --- a/addons/website_forum_doc/models/forum_documentation_toc.py +++ b/addons/website_forum_doc/models/forum_documentation_toc.py @@ -1,9 +1,10 @@ # -*- coding: utf-8 -*- -from openerp.osv import osv, fields +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError -class Documentation(osv.Model): +class Documentation(models.Model): _name = 'forum.documentation.toc' _description = 'Documentation ToC' _inherit = ['website.seo.metadata'] @@ -11,48 +12,36 @@ class Documentation(osv.Model): _parent_order = "sequence, name" _parent_store = True - def name_get(self, cr, uid, ids, context=None): - if isinstance(ids, (list, tuple)) and not len(ids): - return [] - if isinstance(ids, (long, int)): - ids = [ids] - reads = self.read(cr, uid, ids, ['name', 'parent_id'], context=context) + sequence = fields.Integer('Sequence') + name = fields.Char('Name', required=True, translate=True) + introduction = fields.Html('Introduction', translate=True) + parent_id = fields.Many2one('forum.documentation.toc', string='Parent Table Of Content', ondelete='cascade') + child_ids = fields.One2many('forum.documentation.toc', 'parent_id', string='Children Table Of Content') + parent_left = fields.Integer(string='Left Parent', index=True) + parent_right = fields.Integer(string='Right Parent', index=True) + post_ids = fields.One2many('forum.post', 'documentation_toc_id', string='Posts') + forum_id = fields.Many2one('forum.forum', string='Forum', required=True) + + @api.multi + def name_get(self): res = [] - for record in reads: - name = record['name'] - if record['parent_id']: - name = record['parent_id'][1]+' / '+name - res.append((record['id'], name)) + for record in self: + name = record.name + if record.parent_id: + name = record.parent_id.name + ' / ' + name + res.append((record.id, name)) return res - # TODO master remove me - def _name_get_fnc(self, cr, uid, ids, prop, unknow_none, context=None): - res = self.name_get(cr, uid, ids, context=context) - return dict(res) - - _columns = { - 'sequence': fields.integer('Sequence'), - 'name': fields.char('Name', required=True, translate=True), - 'introduction': fields.html('Introduction', translate=True), - 'parent_id': fields.many2one('forum.documentation.toc', 'Parent Table Of Content', ondelete='cascade'), - 'child_ids': fields.one2many('forum.documentation.toc', 'parent_id', 'Children Table Of Content'), - 'parent_left': fields.integer('Left Parent', select=True), - 'parent_right': fields.integer('Right Parent', select=True), - 'post_ids': fields.one2many('forum.post', 'documentation_toc_id', 'Posts'), - 'forum_id': fields.many2one('forum.forum', 'Forum', required=True), - } - - _constraints = [ - (osv.osv._check_recursion, 'Error ! You cannot create recursive categories.', ['parent_id']) - ] + @api.constrains('parent_id') + def _check_parent_id(self): + if not self._check_recursion(): + raise ValidationError(_('Error ! You cannot create recursive categories.')) -class DocumentationStage(osv.Model): +class DocumentationStage(models.Model): _name = 'forum.documentation.stage' _description = 'Post Stage' _order = 'sequence' - _columns = { - 'sequence': fields.integer('Sequence'), - 'name': fields.char('Stage Name', required=True, translate=True), - } + sequence = fields.Integer('Sequence') + name = fields.Char(string='Stage Name', required=True, translate=True) diff --git a/addons/website_forum_doc/models/forum_post.py b/addons/website_forum_doc/models/forum_post.py index 6973754a4f6..19eec377f15 100644 --- a/addons/website_forum_doc/models/forum_post.py +++ b/addons/website_forum_doc/models/forum_post.py @@ -1,30 +1,19 @@ # -*- coding: utf-8 -*- -from openerp.osv import osv, fields +from odoo import api, fields, models -class Post(osv.Model): +class Post(models.Model): _inherit = 'forum.post' - _columns = { - 'documentation_toc_id': fields.many2one('forum.documentation.toc', 'Documentation ToC', ondelete='set null'), - 'documentation_stage_id': fields.many2one('forum.documentation.stage', 'Documentation Stage'), - 'color': fields.integer('Color Index') - } + documentation_toc_id = fields.Many2one('forum.documentation.toc', string='Documentation ToC', ondelete='set null') + documentation_stage_id = fields.Many2one('forum.documentation.stage', string='Documentation Stage', + default=lambda self: self.env['forum.documentation.stage'].search([], limit=1)) + color = fields.Integer(string='Color Index') - def _get_default_stage_id(self, cr, uid, context=None): - stage_ids = self.pool["forum.documentation.stage"].search(cr, uid, [], limit=1, context=context) - return stage_ids and stage_ids[0] or False - - _defaults = { - 'documentation_stage_id': _get_default_stage_id, - } - - def _read_group_stage_ids(self, cr, uid, ids, domain, read_group_order=None, access_rights_uid=None, context=None): - stage_obj = self.pool.get('forum.documentation.stage') - stage_ids = stage_obj.search(cr, uid, [], context=context) - result = stage_obj.name_get(cr, uid, stage_ids, context=context) - return result, {} + @api.multi + def _read_group_stage_ids(self, domain, read_group_order=None, access_rights_uid=None): + return self.env['forum.documentation.stage'].search([]).name_get(), {} _group_by_full = { 'documentation_stage_id': _read_group_stage_ids, diff --git a/addons/website_forum_doc/views/doc.xml b/addons/website_forum_doc/views/doc.xml index 508202497cb..0e8b7cf3caf 100644 --- a/addons/website_forum_doc/views/doc.xml +++ b/addons/website_forum_doc/views/doc.xml @@ -1,7 +1,5 @@ - - - - + + forum.documentation.toc.list @@ -27,7 +25,7 @@ - + forum.post.kanban forum.post @@ -100,6 +98,4 @@ - - - + diff --git a/addons/website_forum_doc/views/website_doc.xml b/addons/website_forum_doc/views/website_doc.xml index fbee8ec0667..6c14a86d07f 100644 --- a/addons/website_forum_doc/views/website_doc.xml +++ b/addons/website_forum_doc/views/website_doc.xml @@ -1,6 +1,5 @@ - - + - - - - +