Exemplo n.º 1
0
    def post_create(self, forum, post_parent=None, **post):
        if post.get('content', '') == '<p><br></p>':
            return request.render(
                'http_routing.http_error', {
                    'status_code':
                    _('Bad Request'),
                    'status_message':
                    post_parent and _('Reply should not be empty.')
                    or _('Question should not be empty.')
                })

        post_tag_ids = forum._tag_to_write_vals(post.get('post_tags', ''))

        if request.env.user.forum_waiting_posts_count:
            return werkzeug.utils.redirect("/forum/%s/ask" % slug(forum))

        new_question = request.env['forum.post'].create({
            'forum_id':
            forum.id,
            'name':
            post.get('post_name')
            or (post_parent and 'Re: %s' % (post_parent.name or '')) or '',
            'content':
            post.get('content', False),
            'parent_id':
            post_parent and post_parent.id or False,
            'tag_ids':
            post_tag_ids
        })
        return werkzeug.utils.redirect(
            "/forum/%s/question/%s" %
            (slug(forum), post_parent and slug(post_parent)
             or new_question.id))
Exemplo n.º 2
0
 def question_edit_answer(self, forum, question, **kwargs):
     for record in question.child_ids:
         if record.create_uid.id == request.uid:
             answer = record
             break
     return werkzeug.utils.redirect("/forum/%s/post/%s/edit" %
                                    (slug(forum), slug(answer)))
Exemplo n.º 3
0
 def convert_answer_to_comment(self, forum, post, **kwarg):
     question = post.parent_id
     new_msg = post.convert_answer_to_comment()
     if not new_msg:
         return werkzeug.utils.redirect("/forum/%s" % slug(forum))
     return werkzeug.utils.redirect("/forum/%s/question/%s" %
                                    (slug(forum), slug(question)))
Exemplo n.º 4
0
 def convert_comment_to_answer(self, forum, post, comment, **kwarg):
     post = request.env['forum.post'].convert_comment_to_answer(comment.id)
     if not post:
         return werkzeug.utils.redirect("/forum/%s" % slug(forum))
     question = post.parent_id if post.parent_id else post
     return werkzeug.utils.redirect("/forum/%s/question/%s" %
                                    (slug(forum), slug(question)))
Exemplo n.º 5
0
 def post_delete(self, forum, post, **kwargs):
     question = post.parent_id
     post.unlink()
     if question:
         werkzeug.utils.redirect("/forum/%s/question/%s" %
                                 (slug(forum), slug(question)))
     return werkzeug.utils.redirect("/forum/%s" % slug(forum))
Exemplo n.º 6
0
 def post_accept(self, forum, post, **kwargs):
     url = "/forum/%s/validation_queue" % (slug(forum))
     if post.state == 'flagged':
         url = "/forum/%s/flagged_queue" % (slug(forum))
     elif post.state == 'offensive':
         url = "/forum/%s/offensive_posts" % (slug(forum))
     post.validate()
     return werkzeug.utils.redirect(url)
Exemplo n.º 7
0
 def post_comment(self, forum, post, **kwargs):
     question = post.parent_id if post.parent_id else post
     if kwargs.get('comment') and post.forum_id.id == forum.id:
         # TDE FIXME: check that post_id is the question or one of its answers
         body = tools.mail.plaintext2html(kwargs['comment'])
         post.with_context(mail_create_nosubscribe=True).message_post(
             body=body, message_type='comment', subtype='mt_comment')
     return werkzeug.utils.redirect("/forum/%s/question/%s" %
                                    (slug(forum), slug(question)))
Exemplo n.º 8
0
 def post_mark_as_offensive(self, forum, post, **kwargs):
     post.mark_as_offensive(reason_id=int(kwargs.get('reason_id', False)))
     url = ''
     if post.parent_id:
         url = "/forum/%s/question/%s/#answer-%s" % (
             slug(forum), post.parent_id.id, post.id)
     else:
         url = "/forum/%s/question/%s" % (slug(forum), slug(post))
     return werkzeug.utils.redirect(url)
Exemplo n.º 9
0
 def open_partner(self, forum, partner_id=0, **post):
     if partner_id:
         partner = request.env['res.partner'].sudo().search([('id', '=',
                                                              partner_id)])
         if partner and partner.user_ids:
             return werkzeug.utils.redirect(
                 "/forum/%s/user/%d" %
                 (slug(forum), partner.user_ids[0].id))
     return werkzeug.utils.redirect("/forum/%s" % slug(forum))
Exemplo n.º 10
0
 def forum(self, **kwargs):
     domain = request.website.website_domain()
     forums = request.env['forum.forum'].search(domain)
     if len(forums) == 1:
         return werkzeug.utils.redirect('/forum/%s' % slug(forums[0]),
                                        code=302)
     return request.render("website_forum.forum_all", {'forums': forums})
Exemplo n.º 11
0
 def _compute_website_url(self):
     super(Channel, self)._compute_website_url()
     for channel in self:
         if channel.id:  # avoid to perform a slug on a not yet saved record in case of an onchange.
             base_url = channel.get_base_url()
             channel.website_url = '%s/slides/%s' % (base_url,
                                                     slug(channel))
Exemplo n.º 12
0
    def thread_headers(self, group, page=1, mode='thread', date_begin=None, date_end=None, **post):
        if group.channel_type != 'channel':
            raise werkzeug.exceptions.NotFound()

        Message = request.env['mail.message']

        domain = [('model', '=', 'mail.channel'), ('res_id', '=', group.id), ('message_type', '!=', 'notification')]
        if mode == 'thread':
            domain += [('parent_id', '=', False)]
        if date_begin and date_end:
            domain += [('date', '>=', date_begin), ('date', '<=', date_end)]

        pager = request.website.pager(
            url='/groups/%s' % slug(group),
            total=Message.search_count(domain),
            page=page,
            step=self._thread_per_page,
            url_args={'mode': mode, 'date_begin': date_begin or '', 'date_end': date_end or ''},
        )
        messages = Message.search(domain, limit=self._thread_per_page, offset=pager['offset'])
        values = {
            'messages': messages,
            'group': group,
            'pager': pager,
            'mode': mode,
            'archives': self._get_archives(group.id),
            'date_begin': date_begin,
            'date_end': date_end,
            'replies_per_page': self._replies_per_page,
        }
        return request.render('website_mail_channel.group_messages', values)
Exemplo n.º 13
0
 def _send_prepare_body(self):
     """ Short-circuit parent method for mail groups, replace the default
         footer with one appropriate for mailing-lists."""
     if self.model == 'mail.channel' and self.res_id:
         # no super() call on purpose, no private links that could be quoted!
         channel = self.env['mail.channel'].browse(self.res_id)
         base_url = self.env['ir.config_parameter'].sudo().get_param(
             'web.base.url')
         vals = {
             'maillist':
             _('Mailing-List'),
             'post_to':
             _('Post to'),
             'unsub':
             _('Unsubscribe'),
             'mailto':
             'mailto:%s@%s' % (channel.alias_name, channel.alias_domain),
             'group_url':
             '%s/groups/%s' % (base_url, slug(channel)),
             'unsub_url':
             '%s/groups?unsubscribe' % (base_url, ),
         }
         footer = """_______________________________________________
                     %(maillist)s: %(group_url)s
                     %(post_to)s: %(mailto)s
                     %(unsub)s: %(unsub_url)s
                 """ % vals
         body = tools.append_content_to_html(self.body,
                                             footer,
                                             container_tag='div')
         return body
     else:
         return super(MailMail, self)._send_prepare_body()
Exemplo n.º 14
0
 def jobs_add(self, **kwargs):
     # avoid branding of website_description by setting rendering_bundle in context
     job = request.env['hr.job'].with_context(rendering_bundle=True).create(
         {
             'name': _('Job Title'),
         })
     return request.redirect("/jobs/detail/%s?enable_editor=1" % slug(job))
Exemplo n.º 15
0
 def _compute_website_url(self):
     # TDE FIXME: clena this link.tracker strange stuff
     super(Slide, self)._compute_website_url()
     for slide in self:
         if slide.id:  # avoid to perform a slug on a not yet saved record in case of an onchange.
             base_url = slide.channel_id.get_base_url()
             # link_tracker is not in dependencies, so use it to shorten url only if installed.
             if self.env.registry.get('link.tracker'):
                 url = self.env['link.tracker'].sudo().create({
                     'url':
                     '%s/slides/slide/%s' % (base_url, slug(slide)),
                     'title':
                     slide.name,
                 }).short_url
             else:
                 url = '%s/slides/slide/%s' % (base_url, slug(slide))
             slide.website_url = url
Exemplo n.º 16
0
 def _notify_email_header_dict(self):
     headers = super(MailGroup, self)._notify_email_header_dict()
     base_url = self.env['ir.config_parameter'].sudo().get_param(
         'web.base.url')
     headers['List-Archive'] = '<%s/groups/%s>' % (base_url, slug(self))
     headers['List-Subscribe'] = '<%s/groups>' % (base_url)
     headers['List-Unsubscribe'] = '<%s/groups?unsubscribe>' % (base_url, )
     return headers
Exemplo n.º 17
0
 def sitemap_forum(env, rule, qs):
     Forum = env['forum.forum']
     dom = sitemap_qs2dom(qs, '/forum', Forum._rec_name)
     dom += env['website'].get_current_website().website_domain()
     for f in Forum.search(dom):
         loc = '/forum/%s' % slug(f)
         if not qs or qs.lower() in loc:
             yield {'loc': loc}
Exemplo n.º 18
0
 def _get_menu_entries(self):
     """ Method returning menu entries to display on the website view of the
     event, possibly depending on some options in inheriting modules. """
     self.ensure_one()
     return [
         (_('Introduction'), False, 'website_event.template_intro'),
         (_('Location'), False, 'website_event.template_location'),
         (_('Register'), '/event/%s/register' % slug(self), False),
     ]
Exemplo n.º 19
0
    def post_save(self, forum, post, **kwargs):
        vals = {
            'content': kwargs.get('content'),
        }

        if 'post_name' in kwargs:
            if not kwargs.get('post_name').strip():
                return request.render(
                    'http_routing.http_error', {
                        'status_code': _('Bad Request'),
                        'status_message': _('Title should not be empty.')
                    })

            vals['name'] = kwargs.get('post_name')
        vals['tag_ids'] = forum._tag_to_write_vals(kwargs.get('post_tags', ''))
        post.write(vals)
        question = post.parent_id if post.parent_id else post
        return werkzeug.utils.redirect("/forum/%s/question/%s" %
                                       (slug(forum), slug(question)))
Exemplo n.º 20
0
def sitemap_shop(env, rule, qs):
    if not qs or qs.lower() in '/shop':
        yield {'loc': '/shop'}

    Category = env['product.public.category']
    dom = sitemap_qs2dom(qs, '/shop/category', Category._rec_name)
    dom += env['website'].get_current_website().website_domain()
    for cat in Category.search(dom):
        loc = '/shop/category/%s' % slug(cat)
        if not qs or qs.lower() in loc:
            yield {'loc': loc}
Exemplo n.º 21
0
    def sitemap_partners(env, rule, qs):
        if not qs or qs.lower() in '/partners':
            yield {'loc': '/partners'}

        Grade = env['res.partner.grade']
        dom = [('website_published', '=', True)]
        dom += sitemap_qs2dom(qs=qs, route='/partners/grade/', field=Grade._rec_name)
        for grade in env['res.partner.grade'].search(dom):
            loc = '/partners/grade/%s' % slug(grade)
            if not qs or qs.lower() in loc:
                yield {'loc': loc}

        partners_dom = [('is_company', '=', True), ('grade_id', '!=', False), ('website_published', '=', True),
                        ('grade_id.website_published', '=', True), ('country_id', '!=', False)]
        dom += sitemap_qs2dom(qs=qs, route='/partners/country/')
        countries = env['res.partner'].sudo().read_group(partners_dom, fields=['id', 'country_id'], groupby='country_id')
        for country in countries:
            loc = '/partners/country/%s' % slug(country['country_id'])
            if not qs or qs.lower() in loc:
                yield {'loc': loc}
Exemplo n.º 22
0
 def forum_post(self, forum, **post):
     user = request.env.user
     if not user.email or not tools.single_email_re.match(user.email):
         return werkzeug.utils.redirect(
             "/forum/%s/user/%s/edit?email_required=1" %
             (slug(forum), request.session.uid))
     values = self._prepare_user_values(forum=forum,
                                        searches={},
                                        header={'ask_hide': True},
                                        new_question=True)
     return request.render("website_forum.new_question", values)
Exemplo n.º 23
0
    def question(self, forum, question, **post):
        if not forum.active:
            return request.render("website_forum.header", {'forum': forum})

        # Hide posts from abusers (negative karma), except for moderators
        if not question.can_view:
            raise werkzeug.exceptions.NotFound()

        # Hide pending posts from non-moderators and non-creator
        user = request.env.user
        if question.state == 'pending' and user.karma < forum.karma_post and question.create_uid != user:
            raise werkzeug.exceptions.NotFound()

        # increment view counter
        question.sudo().set_viewed()
        if question.parent_id:
            redirect_url = "/forum/%s/question/%s" % (slug(forum),
                                                      slug(question.parent_id))
            return werkzeug.utils.redirect(redirect_url, 301)
        filters = 'question'
        values = self._prepare_user_values(forum=forum, searches=post)
        values.update({
            'main_object':
            question,
            'question':
            question,
            'can_bump':
            (question.forum_id.allow_bump and not question.child_ids
             and (datetime.today() - question.write_date).days > 9),
            'header': {
                'question_data': True
            },
            'filters':
            filters,
            'reversed':
            reversed,
        })
        if (request.httprequest.referrer
                or "").startswith(request.httprequest.url_root):
            values['back_button_url'] = request.httprequest.referrer
        return request.render("website_forum.post_description_full", values)
Exemplo n.º 24
0
 def _create_menu(self, sequence, name, url, xml_id):
     if not url:
         self.env['ir.ui.view'].search([('name', '=', name + ' ' + self.name)]).unlink()
         newpath = self.env['website'].new_page(name + ' ' + self.name, template=xml_id, ispage=False)['url']
         url = "/event/" + slug(self) + "/page/" + newpath[1:]
     menu = self.env['website.menu'].create({
         'name': name,
         'url': url,
         'parent_id': self.menu_id.id,
         'sequence': sequence,
         'website_id': self.website_id.id,
     })
     return menu
Exemplo n.º 25
0
    def sitemap_industry(env, rule, qs):
        if not qs or qs.lower() in '/customers':
            yield {'loc': '/customers'}

        Industry = env['res.partner.industry']
        dom = sitemap_qs2dom(qs, '/customers/industry', Industry._rec_name)
        for industry in Industry.search(dom):
            loc = '/customers/industry/%s' % slug(industry)
            if not qs or qs.lower() in loc:
                yield {'loc': loc}

        dom = [('website_published', '=', True),
               ('assigned_partner_id', '!=', False),
               ('country_id', '!=', False)]
        dom += sitemap_qs2dom(qs, '/customers/country')
        countries = env['res.partner'].sudo().read_group(dom,
                                                         ['id', 'country_id'],
                                                         groupby='country_id')
        for country in countries:
            loc = '/customers/country/%s' % slug(country['country_id'])
            if not qs or qs.lower() in loc:
                yield {'loc': loc}
Exemplo n.º 26
0
 def forum_create(self,
                  forum_name="New Forum",
                  forum_mode="questions",
                  add_menu=False):
     forum_id = request.env['forum.forum'].create({
         'name':
         forum_name,
         'mode':
         forum_mode,
         'website_id':
         request.website.id,
     })
     if add_menu:
         request.env['website.menu'].create({
             'name':
             forum_name,
             'url':
             "/forum/%s" % slug(forum_id),
             'parent_id':
             request.website.menu_id.id,
             'website_id':
             request.website.id,
         })
     return "/forum/%s" % slug(forum_id)
Exemplo n.º 27
0
 def __call__(self, path=None, path_args=None, **kw):
     path = path or self.path
     for key, value in self.args.items():
         kw.setdefault(key, value)
     path_args = OrderedSet(path_args or []) | self.path_args
     paths, fragments = {}, []
     for key, value in kw.items():
         if value and key in path_args:
             if isinstance(value, models.BaseModel):
                 paths[key] = slug(value)
             else:
                 paths[key] = u"%s" % value
         elif value:
             if isinstance(value, list) or isinstance(value, set):
                 fragments.append(werkzeug.url_encode([(key, item) for item in value]))
             else:
                 fragments.append(werkzeug.url_encode([(key, value)]))
     for key in path_args:
         value = paths.get(key)
         if value is not None:
             path += '/' + key + '/' + value
     if fragments:
         path += '?' + '&'.join(fragments)
     return path
Exemplo n.º 28
0
 def _compute_website_url(self):
     super(Track, self)._compute_website_url()
     for track in self:
         if track.id:
             track.website_url = '/event/%s/track/%s' % (slug(
                 track.event_id), slug(track))
Exemplo n.º 29
0
 def _compute_website_url(self):
     super(Event, self)._compute_website_url()
     for event in self:
         if event.id:  # avoid to perform a slug on a not yet saved record in case of an onchange.
             event.website_url = '/event/%s' % slug(event)
Exemplo n.º 30
0
 def question_undelete(self, forum, question, **kwarg):
     question.active = True
     return werkzeug.utils.redirect("/forum/%s/question/%s" %
                                    (slug(forum), slug(question)))