'depends': ['knowledge', 'website_mail'],
'data': [
'website_blog_data.xml',
- 'views/website_blog_views.xml',
- 'views/website_templates.xml',
+ 'website_blog_demo.xml',
+ 'views/website_blog_classic.xml',
+ 'views/website_blog_templates.xml',
'views/res_config.xml',
# 'wizard/document_page_create_menu_view.xml',
'wizard/document_page_show_diff_view.xml',
'security/website_mail.xml',
],
'demo': [
- 'website_blog_demo.xml'
+ # 'website_blog_demo.xml'
],
'test': [
'test/document_page_test00.yml'
blog_post = None
blog_posts = None
pager = None
- if not category_id:
- category_ids = category_obj.search(cr, uid, [], context=context)
- categories = category_obj.browse(cr, uid, category_ids, context=context)
+
+ category_ids = category_obj.search(cr, uid, [], context=context)
+ categories = category_obj.browse(cr, uid, category_ids, context=context)
+
# category but no post chosen: display the last ones, create pager
- elif category_id and not blog_post_id:
+ if category_id and not blog_post_id:
pager_begin = (page - 1) * self._category_post_per_page
pager_end = page * self._category_post_per_page
category = category_obj.browse(cr, uid, category_id, context=context)
'website_published': False,
}, context=create_context)
return werkzeug.utils.redirect("/blog/%s/%s/?unable_editor=1" % (category_id, blog_id))
-
- def _find_or_create_partner(self, email, context=None):
- partner_obj = request.registry['res.partner']
- user_obj = request.registry['res.users']
- partner_ids = []
- if request.context['is_public_user'] and email:
- partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", email)], context=request.context)
- if not partner_ids:
- partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": email, "name": email}, request.context)]
- else:
- partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
- return partner_ids
-
- @website.route(['/blog/<int:category_id>/subscribe'], type='http', auth="public")
- def category_subscribe(self, category_id=None, **post):
- partner_ids = self._find_or_create_partner(post.get('email'), request.context)
- category_obj = request.registry['blog.category']
-
- category_obj.check_access_rule(request.cr, request.uid, [category_id], 'read', request.context)
- category_obj.message_subscribe(request.cr, SUPERUSER_ID, [category_id], partner_ids, context=request.context)
-
- return self.blog(category_id=category_id)
-
- @website.route(['/blog/<int:category_id>/unsubscribe'], type='http', auth="public")
- def category_unsubscribe(self, category_id=None, **post):
- partner_ids = self._find_or_create_partner(post.get('email'), request.context)
- category_obj = request.registry['blog.category']
-
- category_obj.check_access_rule(request.cr, request.uid, [category_id], 'read', request.context)
- category_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [category_id], partner_ids, context=request.context)
-
- return self.blog(category_id=category_id)
-
- @website.route(['/blog/<int:category_id>/<int:blog_post_id>/subscribe'], type='http', auth="public")
- def blog_post_subscribe(self, category_id=None, blog_post_id=None, **post):
- partner_ids = self._find_or_create_partner(post.get('email'), request.context)
- blog_post_obj = request.registry['blog.post']
-
- blog_post_obj.check_access_rule(request.cr, request.uid, [blog_post_id], 'read', request.context)
- blog_post_obj.message_subscribe(request.cr, SUPERUSER_ID, [blog_post_id], partner_ids, context=request.context)
-
- return self.blog(category_id=category_id, blog_post_id=blog_post_id)
-
- @website.route(['/blog/<int:category_id>/<int:blog_post_id>/unsubscribe'], type='http', auth="public")
- def blog_post_unsubscribe(self, category_id=None, blog_post_id=None, **post):
- partner_ids = self._find_or_create_partner(post.get('email'), request.context)
- blog_post_obj = request.registry['blog.post']
-
- blog_post_obj.check_access_rule(request.cr, request.uid, [blog_post_id], 'read', request.context)
- blog_post_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [blog_post_id], partner_ids, context=request.context)
-
- return self.blog(category_id=category_id, blog_post_id=blog_post_id)
sass:
- sass --compass --trace -t expanded blog.sass blog.css
+ sass --compass --trace -t expanded website_blog.sass website_blog.css
+++ /dev/null
-.css_website_mail .has-error {
- border-color: red;
-}
-.css_website_mail .css_nav_month {
- display: none;
-}
-.css_website_mail .css_nav_month:first-of-type {
- display: block;
-}
+++ /dev/null
-@import "compass/css3"
-
-.css_website_mail
- .has-error
- border-color: red
- .css_nav_month
- display: none
- &:first-of-type
- display: block
-
-/* ---- PUBLISH ---- */
-/ a[data-publish]
-/ text-decoration: none !important
-/ z-index: 2
-/ .label
-/ padding: 5px 8px
-/ .css_unpublish, .css_publish, .css_unpublished, .css_published
-/ display: none
-/ &[data-publish='off']
-/ .css_unpublished, &:hover .css_publish
-/ display: inline
-/ &:hover .css_unpublished
-/ display: none
-/ &[data-publish='on']
-/ .css_published, &:hover .css_unpublish
-/ display: inline
-/ &:hover .css_published
-/ display: none
-
-/ [data-publish='off']:not(a)
-/ >:not([data-publish])
-/ opacity: 0.5
-/ [data-publish]:not(a)
-/ position: relative
-/ overflow: visible
-/ >[data-publish]
-/ position: absolute
-/ right: -6px
-/ top: -10px
-/ display: none
- /*&:hover > [data-publish]*/
- /* display: block*/
--- /dev/null
+.css_website_mail .has-error {
+ border-color: red;
+}
+.css_website_mail .css_nav_month {
+ display: none;
+}
+.css_website_mail .css_nav_month:first-of-type {
+ display: block;
+}
--- /dev/null
+@import "compass/css3"
+
+.css_website_mail
+ .has-error
+ border-color: red
+ .css_nav_month
+ display: none
+ &:first-of-type
+ display: block
+++ /dev/null
-$(document).ready(function () {
- $form = $('.js_nav_year a:first').on('click', function (e) {
- e.preventDefault();
- $(this).next("ul").toggle();
- });
-
- $form = $('.js_nav_month a:first').on('click', function (e) {
- e.preventDefault();
- var $ul = $(this).next("ul");
- if (!$ul.find('li').length) {
- $.post('/blog/nav', {'domain': $(this).data("domain")}, function (result) {
- var result = JSON.parse(result);
- var blog_id = +window.location.pathname.split("/").pop();
- $(result).each(function () {
- var $a = $('<a href="/blog/'+this.res_id+'/'+this.id+'"/>').text(this.subject);
- var $li = $("<li/>").append($a);
- if (blog_id == this.id)
- $li.addClass("active");
- if (!this.website_published)
- $a.css("color", "red");
- $ul.append($li);
- });
-
- });
- } else {
- $ul.toggle();
- }
- });
-
- $form = $('.js_website_mail form#post');
- $form.submit(function (e) {
- e.preventDefault();
- var error = $form.find("textarea").val().length < 3;
- $form.find("textarea").toggleClass("has-error", error);
- if (!error) {
- $form.css("visibility", "hidden");
- $.post(window.location.pathname + '/post', {'body': $form.find("textarea").val()}, function (url) {
- window.location.href = url
- });
- }
- });
-});
\ No newline at end of file
--- /dev/null
+$(document).ready(function () {
+ $form = $('.js_nav_year a:first').on('click', function (e) {
+ e.preventDefault();
+ $(this).next("ul").toggle();
+ });
+
+ $form = $('.js_nav_month a:first').on('click', function (e) {
+ e.preventDefault();
+ var $ul = $(this).next("ul");
+ if (!$ul.find('li').length) {
+ $.post('/blog/nav', {'domain': $(this).data("domain")}, function (result) {
+ var result = JSON.parse(result);
+ var blog_id = +window.location.pathname.split("/").pop();
+ $(result).each(function () {
+ var $a = $('<a href="/blog/'+this.res_id+'/'+this.id+'"/>').text(this.subject);
+ var $li = $("<li/>").append($a);
+ if (blog_id == this.id)
+ $li.addClass("active");
+ if (!this.website_published)
+ $a.css("color", "red");
+ $ul.append($li);
+ });
+
+ });
+ } else {
+ $ul.toggle();
+ }
+ });
+
+ $form = $('.js_website_blog form#comment');
+ $form.submit(function (e) {
+ e.preventDefault();
+ console.log(e)
+ var error = $form.find("textarea").val().length < 3;
+ $form.find("textarea").toggleClass("has-error", error);
+ if (!error) {
+ $form.css("visibility", "hidden");
+ $.post(window.location.pathname + '/post', {'body': $form.find("textarea").val()}, function (url) {
+ window.location.href = url
+ });
+ }
+ });
+});
\ No newline at end of file
--- /dev/null
+<?xml version="1.0"?>
+<openerp>
+ <data>
+ <menuitem name="Knowledge" id="knowledge.menu_document"/>
+ <menuitem name="Pages" id="menu_wiki" parent="knowledge.menu_document" sequence="20" />
+
+ <!-- Category views -->
+ <record model="ir.ui.view" id="view_blog_category_list">
+ <field name="name">blog.category.list</field>
+ <field name="model">blog.category</field>
+ <field name="arch" type="xml">
+ <tree string="Blog Categories">
+ <field name="name"/>
+ </tree>
+ </field>
+ </record>
+ <record model="ir.ui.view" id="view_blog_category_form">
+ <field name="name">blog.category.form</field>
+ <field name="model">blog.category</field>
+ <field name="arch" type="xml">
+ <form string="Blog Category" version="7.0">
+ <sheet>
+ <group>
+ <field name="name"/>
+ <field name="description"/>
+ <field name="template" widget="html"/>
+ </group>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
+ <field name="message_ids" widget="mail_thread" options='{"thread_level": 1}' placeholder="Send a message to the group"/>
+ </div>
+ </form>
+ </field>
+ </record>
+
+ <!-- page list view -->
+ <record model="ir.ui.view" id="view_blog_post_list">
+ <field name="name">blog.post.list</field>
+ <field name="model">blog.post</field>
+ <field name="arch" type="xml">
+ <tree string="Blog Posts">
+ <field name="name"/>
+ <field name="category_id"/>
+ <field name="create_uid" invisible="1"/>
+ <field name="write_uid"/>
+ <field name="write_date"/>
+ </tree>
+ </field>
+ </record>
+ <!-- page form view -->
+ <record model="ir.ui.view" id="view_blog_post_form">
+ <field name="name">blog.post.form</field>
+ <field name="model">blog.post</field>
+ <field name="arch" type="xml">
+ <form string="Blog Post" version="7.0">
+ <sheet>
+ <h1><field name="name" placeholder="Name"/></h1>
+ <field name="tag_ids" widget="many2many_tags"/>
+ <group>
+ <field name="category_id" string="Category"/>
+ </group>
+ <group>
+ <field name="write_uid" groups="base.group_no_one"/>
+ <field name="write_date" groups="base.group_no_one"/>
+ <field name="menu_id" groups="base.group_no_one"/>
+ </group>
+ <div class="oe_document_page">
+ <field name="content" placeholder="e.g. Once upon a time..." widget="html"/>
+ </div>
+ </sheet>
+ <div class="oe_chatter">
+ <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
+ <field name="message_ids" widget="mail_thread" options='{"thread_level": 1}' placeholder="Send a message to the group"/>
+ </div>
+ </form>
+ </field>
+ </record>
+ <!-- page search view -->
+ <record model="ir.ui.view" id="view_blog_post_search">
+ <field name="name">blog.post.search</field>
+ <field name="model">blog.post</field>
+ <field name="arch" type="xml">
+ <search string="Blog Post">
+ <field name="name" string="Content" filter_domain="['|', ('name','ilike',self), ('content','ilike',self)]"/>
+ <field name="write_uid"/>
+ <field name="category_id"/>
+ <group expand="0" string="Group By...">
+ <filter string="Category" domain="[]" context="{'group_by': 'category_id'}"/>
+ <filter string="Author" domain="[]" context="{'group_by': 'create_uid'}"/>
+ <filter string="Last Contributor" domain="[]" context="{'group_by': 'write_uid'}"/>
+ </group>
+ </search>
+ </field>
+ </record>
+ <!-- page action -->
+ <record model="ir.actions.act_window" id="action_blog_post">
+ <field name="name">Blog Posts</field>
+ <field name="res_model">blog.post</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ <field name="view_id" ref="view_blog_post_list"/>
+ <field name="search_view_id" ref="view_blog_post_search"/>
+ <field name="help" type="html">
+ <p class="oe_view_nocontent_create">
+ Click to create a new blog post.
+ </p>
+ </field>
+ </record>
+ <menuitem id="menu_page" parent="menu_wiki" name="Pages" action="action_blog_post" sequence="10"/>
+
+ <record model="ir.actions.act_window" id="action_blog_category">
+ <field name="name">Category</field>
+ <field name="res_model">blog.category</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+ <menuitem id="menu_category" parent="menu_wiki" name="Categories" action="action_blog_category" sequence="20"/>
+
+ <!-- History Tree view -->
+ <record model="ir.ui.view" id="view_blog_history_tree">
+ <field name="name">blog.post.history.tree</field>
+ <field name="model">blog.post.history</field>
+ <field name="arch" type="xml">
+ <tree string="Document History">
+ <field name="create_date"/>
+ <field name="create_uid"/>
+ <field name="page_id"/>
+ </tree>
+ </field>
+ </record>
+ <!-- History Form view -->
+ <record model="ir.ui.view" id="view_blog_history_form">
+ <field name="name">blog.post.history.form</field>
+ <field name="model">blog.post.history</field>
+ <field name="arch" type="xml">
+ <form string="Blog Post History" version="7.0">
+ <label for="page_id" class="oe_edit_only"/>
+ <h1><field name="page_id" select="1" /></h1>
+ <label for="create_date" class="oe_edit_only"/>
+ <field name="create_date" readonly="1"/>
+ <label for="content" class="oe_edit_only"/>
+ <field name="content" colspan="4"/>
+ </form>
+ </field>
+ </record>
+ <!-- History Action -->
+ <record model="ir.actions.act_window" id="action_history">
+ <field name="name">Page history</field>
+ <field name="res_model">blog.post.history</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">tree,form</field>
+ </record>
+ <menuitem id="menu_page_history" parent="menu_wiki" name="Pages history" action="action_history" sequence="30" groups="base.group_no_one"/>
+ <act_window
+ id="action_related_page_history"
+ context="{'search_default_page_id': [active_id], 'default_page_id': active_id}"
+ domain="[('page_id','=',active_id)]"
+ name="Page History"
+ res_model="blog.post.history"
+ src_model="blog.post"/>
+<!-- <act_window
+ id="action_related_page_create_menu"
+ name="Create Menu"
+ res_model="blog.post.create.menu"
+ target="new"
+ view_type="form"
+ view_mode="form"
+ src_model="blog.post"/> -->
+
+ </data>
+</openerp>
--- /dev/null
+<?xml version="1.0" encoding="utf-8"?>
+<openerp>
+<data>
+
+ <!-- Layout add nav and footer -->
+ <template id="header_footer_custom" inherit_id="website.layout">
+ <xpath expr="//body/header//ul[@id='top_menu']/li[last()]" position="before">
+ <li><a href="/blog/%(website_blog.blog_category_1)d/">News</a></li>
+ </xpath>
+ <xpath expr="//body/footer//div[@name='info']/ul" position="inside">
+ <li><a href="/blog/%(website_blog.blog_category_1)d/">News</a></li>
+ </xpath>
+ </template>
+
+ <!-- Blog Post -->
+ <template id="view_blog_post_short" name="Blog Post Short">
+ <div class="media-body">
+ <t t-call="website_mail.follow"><t t-set="object" t-value="blog_post"/></t>
+ <t t-call="website.publish"><t t-set="object" t-value="blog_post"/></t>
+ <small class="text-muted">
+ <t t-field="blog_post.create_uid"/> on <t t-field="blog_post.create_date"/>
+ </small>
+ <h4 class="media-heading" ><a t-attf-href="/blog/#{blog_post.category_id.id}/#{blog_post.id}#comment" t-field="blog_post.name"></a></h4>
+ <div class="media">
+ <div t-field="blog_post.shortened_content"/>
+ <small class="pull-left muted text-right">
+ <a t-if="len(blog_post.message_ids) <= 1" t-attf-href="/blog/#{blog_post.category_id.id}/#{blog_post.id}#comments"><t t-esc="len(blog_post.message_ids)"/> Comment</a>
+ <a t-if="len(blog_post.message_ids) > 1" t-attf-href="/blog/#{blog_post.category_id.id}/#{blog_post.id}#comments"><t t-esc="len(blog_post.message_ids)"/> Comments</a>
+ </small>
+ </div>
+ </div>
+ </template>
+
+ <template id="view_blog_post" name="Blog Post">
+ <div class="media">
+ <div class="media-body">
+ <t t-call="website_mail.follow"><t t-set="object" t-value="blog_post"/></t>
+ <t t-call="website.publish"><t t-set="object" t-value="blog_post"/></t>
+ <small class="text-muted">
+ <t t-field="blog_post.create_uid"/> on <t t-field="blog_post.create_date"/>
+ </small>
+ <h3 t-field="blog_post.name"/>
+ <div t-field="blog_post.content"/>
+ </div>
+ <ul class="media-list" id="comments">
+ <li t-foreach="blog_post.website_message_ids" t-as="message" class="media">
+ <div class="media-body">
+ <t t-call="website.publish"><t t-set="object" t-value="message"/></t>
+ <t t-raw="message.body"/>
+ <small class="pull-right muted text-right">
+ <div t-field="message.author_id"/>
+ <div t-field="message.date"/>
+ </small>
+ </div>
+ </li>
+ </ul>
+ <form id="comment" t-attf-action="/blog/#{blog_post.category_id.id}/#{blog_post.id}/post#post"
+ method="POST" class="form-horizontal text-center"
+ groups="group_website_blog_reply">
+ <textarea rows="4" placeholder="Your comment" class="col-md-7 form-control"></textarea>
+ <button type="submit" class="btn btn-default">Post your comment</button>
+ </form>
+ </div>
+ </template>
+
+ <!-- Page -->
+ <template id="index" name="Blogs" page="True">
+ <t t-call="website.layout">
+ <t t-set="head">
+ <script type="text/javascript" src="/website_blog/static/src/js/website_blog.js"></script>
+ <link rel='stylesheet' href='/website_blog/static/src/css/website_blog.css'/>
+ <t t-raw="head or ''"/>
+ </t>
+ <t t-set="title">Blog</t>
+ <div id="wrap">
+ <div class="container mt48 js_website_blog">
+ <div class="row">
+ <div class="col-md-3" id="left_column">
+ <h4>Categories</h4>
+ <ul class="nav nav-pills nav-stacked">
+ <t t-foreach="categories" t-as="nav_category">
+ <li t-att-class="'active' if category and category.id == nav_category.id else ''">
+ <a t-attf-href="/blog/#{nav_category.id}">
+ <t t-field="nav_category.name"/>
+ </a>
+ </li>
+ </t>
+ </ul>
+ <t t-if="category">
+ <a t-if="editable" t-attf-href="/blog/#{category.id}/new" class="btn btn-default">New Blog Post</a>
+ <t t-call="website_mail.follow"><t t-set="object" t-value="category"/></t>
+ </t>
+ </div>
+ <div class="col-md-9" t-if="blog_post">
+ <t t-call="website_blog.view_blog_post"><t t-set="blog_post" t-value="blog_post"/></t>
+ </div>
+
+ <div class="col-md-9" t-if="not blog_post and blog_posts">
+ <ul class="media-list">
+ <li t-foreach="blog_posts" t-as="blog_post" data-publish="">
+ <t t-call="website_blog.view_blog_post_short"/>
+ </li>
+ </ul>
+ <div class="text-center">
+ <t t-call="website.pager"/>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </t>
+ </template>
+
+ <template id="blog_author" inherit_id="website_blog.index" inherit_option_id="website_blog.index" name="Author">
+<!-- <xpath expr="//div[@t-field='document_page.create_date']" position="before">
+ <div t-field="document_page.author_id"/>
+ </xpath>
+ <xpath expr="//div[@t-field='blog.create_date']" position="before">
+ <div t-field="blog.author_id"/>
+ </xpath> -->
+ </template>
+
+ <!-- Option: archives -->
+ <template id="blog_history" inherit_id="website_blog.index" inherit_option_id="website_blog.index" name="History">
+ <xpath expr="//div[@id='left_column']" position="inside">
+ <h4>Archives</h4>
+ <ul class="nav nav-pills nav-stacked">
+ <li t-foreach="nav_list" t-as="year" class="js_nav_year">
+ <t t-set="year" t-value="nav_list[year]"/>
+ <a href="#"><t t-esc="year['name']"/> <small>(<t t-esc="year['create_date_count']"/>)</small></a>
+ <ul class="nav list-group css_nav_month nav-stacked nav-hierarchy">
+ <t t-foreach="year['months']">
+ <li class="js_nav_month"><a href="#" t-att-data-domain="__domain"><t t-esc="create_date"/> <small>(<t t-esc="create_date_count"/>)</small></a>
+ <ul class="nav list-group nav-stacked nav-hierarchy"/>
+ </li>
+ </t>
+ </ul>
+ </li>
+ </ul>
+ </xpath>
+ </template>
+ </data>
+</openerp>
+++ /dev/null
-<?xml version="1.0"?>
-<openerp>
- <data>
- <menuitem name="Knowledge" id="knowledge.menu_document"/>
- <menuitem name="Pages" id="menu_wiki" parent="knowledge.menu_document" sequence="20" />
-
- <!-- Category views -->
- <record model="ir.ui.view" id="view_blog_category_list">
- <field name="name">blog.category.list</field>
- <field name="model">blog.category</field>
- <field name="arch" type="xml">
- <tree string="Blog Categories">
- <field name="name"/>
- </tree>
- </field>
- </record>
- <record model="ir.ui.view" id="view_blog_category_form">
- <field name="name">blog.category.form</field>
- <field name="model">blog.category</field>
- <field name="arch" type="xml">
- <form string="Blog Category" version="7.0">
- <sheet>
- <group>
- <field name="name"/>
- <field name="description"/>
- <field name="template" widget="html"/>
- </group>
- </sheet>
- <div class="oe_chatter">
- <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
- <field name="message_ids" widget="mail_thread" options='{"thread_level": 1}' placeholder="Send a message to the group"/>
- </div>
- </form>
- </field>
- </record>
-
- <!-- page list view -->
- <record model="ir.ui.view" id="view_blog_post_list">
- <field name="name">blog.post.list</field>
- <field name="model">blog.post</field>
- <field name="arch" type="xml">
- <tree string="Blog Posts">
- <field name="name"/>
- <field name="category_id"/>
- <field name="create_uid" invisible="1"/>
- <field name="write_uid"/>
- <field name="write_date"/>
- </tree>
- </field>
- </record>
- <!-- page form view -->
- <record model="ir.ui.view" id="view_blog_post_form">
- <field name="name">blog.post.form</field>
- <field name="model">blog.post</field>
- <field name="arch" type="xml">
- <form string="Blog Post" version="7.0">
- <sheet>
- <h1><field name="name" placeholder="Name"/></h1>
- <field name="tag_ids" widget="many2many_tags"/>
- <group>
- <field name="category_id" string="Category"/>
- </group>
- <group>
- <field name="write_uid" groups="base.group_no_one"/>
- <field name="write_date" groups="base.group_no_one"/>
- <field name="menu_id" groups="base.group_no_one"/>
- </group>
- <div class="oe_document_page">
- <field name="content" placeholder="e.g. Once upon a time..." widget="html"/>
- </div>
- </sheet>
- <div class="oe_chatter">
- <field name="message_follower_ids" widget="mail_followers" groups="base.group_user"/>
- <field name="message_ids" widget="mail_thread" options='{"thread_level": 1}' placeholder="Send a message to the group"/>
- </div>
- </form>
- </field>
- </record>
- <!-- page search view -->
- <record model="ir.ui.view" id="view_blog_post_search">
- <field name="name">blog.post.search</field>
- <field name="model">blog.post</field>
- <field name="arch" type="xml">
- <search string="Blog Post">
- <field name="name" string="Content" filter_domain="['|', ('name','ilike',self), ('content','ilike',self)]"/>
- <field name="write_uid"/>
- <field name="category_id"/>
- <group expand="0" string="Group By...">
- <filter string="Category" domain="[]" context="{'group_by': 'category_id'}"/>
- <filter string="Author" domain="[]" context="{'group_by': 'create_uid'}"/>
- <filter string="Last Contributor" domain="[]" context="{'group_by': 'write_uid'}"/>
- </group>
- </search>
- </field>
- </record>
- <!-- page action -->
- <record model="ir.actions.act_window" id="action_blog_post">
- <field name="name">Blog Posts</field>
- <field name="res_model">blog.post</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
- <field name="view_id" ref="view_blog_post_list"/>
- <field name="search_view_id" ref="view_blog_post_search"/>
- <field name="help" type="html">
- <p class="oe_view_nocontent_create">
- Click to create a new blog post.
- </p>
- </field>
- </record>
- <menuitem id="menu_page" parent="menu_wiki" name="Pages" action="action_blog_post" sequence="10"/>
-
- <record model="ir.actions.act_window" id="action_blog_category">
- <field name="name">Category</field>
- <field name="res_model">blog.category</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
- </record>
- <menuitem id="menu_category" parent="menu_wiki" name="Categories" action="action_blog_category" sequence="20"/>
-
- <!-- History Tree view -->
- <record model="ir.ui.view" id="view_blog_history_tree">
- <field name="name">blog.post.history.tree</field>
- <field name="model">blog.post.history</field>
- <field name="arch" type="xml">
- <tree string="Document History">
- <field name="create_date"/>
- <field name="create_uid"/>
- <field name="page_id"/>
- </tree>
- </field>
- </record>
- <!-- History Form view -->
- <record model="ir.ui.view" id="view_blog_history_form">
- <field name="name">blog.post.history.form</field>
- <field name="model">blog.post.history</field>
- <field name="arch" type="xml">
- <form string="Blog Post History" version="7.0">
- <label for="page_id" class="oe_edit_only"/>
- <h1><field name="page_id" select="1" /></h1>
- <label for="create_date" class="oe_edit_only"/>
- <field name="create_date" readonly="1"/>
- <label for="content" class="oe_edit_only"/>
- <field name="content" colspan="4"/>
- </form>
- </field>
- </record>
- <!-- History Action -->
- <record model="ir.actions.act_window" id="action_history">
- <field name="name">Page history</field>
- <field name="res_model">blog.post.history</field>
- <field name="view_type">form</field>
- <field name="view_mode">tree,form</field>
- </record>
- <menuitem id="menu_page_history" parent="menu_wiki" name="Pages history" action="action_history" sequence="30" groups="base.group_no_one"/>
- <act_window
- id="action_related_page_history"
- context="{'search_default_page_id': [active_id], 'default_page_id': active_id}"
- domain="[('page_id','=',active_id)]"
- name="Page History"
- res_model="blog.post.history"
- src_model="blog.post"/>
-<!-- <act_window
- id="action_related_page_create_menu"
- name="Create Menu"
- res_model="blog.post.create.menu"
- target="new"
- view_type="form"
- view_mode="form"
- src_model="blog.post"/> -->
-
- </data>
-</openerp>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<openerp>
-<data>
-
- <!-- Layout add nav and footer -->
- <template id="header_footer_custom" inherit_id="website.layout">
- <xpath expr="//body/header//ul[@id='top_menu']/li[last()]" position="before">
- <li><a href="/blog/%(website_blog.blog_category_1)d/">News</a></li>
- </xpath>
- <xpath expr="//body/footer//div[@name='info']/ul" position="inside">
- <li><a href="/blog/%(website_blog.blog_category_1)d/">News</a></li>
- </xpath>
- </template>
-
- <!-- Follow button -->
- <template id="blog_post_unfollow" name="Follow">
- <form t-attf-action="/blog/#{object.category_id.id}/#{object.id}/unsubscribe" method="POST" class="form-inline" t-if="object.message_is_follower">
- <input type="hidden" name="email" t-att-value="subscribe" style="display: none"/>
- <button type="submit" class="btn btn-sm btn-default pull-right" name="unsubscribe">Unfollow</button>
- </form>
- </template>
- <template id="blog_post_follow" name="Follow">
- <form t-attf-action="/blog/#{object.category_id.id}/#{object.id}/subscribe" method="POST" class="form-inline" t-if="not object.message_is_follower">
- <div class="col-lg-7">
- <input placeholder="Email Address" type="email" name="email" class="form-control" t-if="is_public_user"/>
- </div>
- <button type="submit" class="btn btn-sm btn-primary pull-right" name="subscribe">Follow</button>
- </form>
- </template>
-
- <!-- Post -->
- <template id="blog_post_short" name="Blog Post">
- <div class="media-body">
- <t t-call="website_blog.blog_post_follow"><t t-set="object" t-value="blog_post"/></t>
- <t t-call="website_blog.blog_post_unfollow"><t t-set="object" t-value="blog_post"/></t>
- <t t-call="website.publish"><t t-set="object" t-value="blog_post"/></t>
- <small class="text-muted">
- <t t-field="blog_post.create_uid"/> on <t t-field="blog_post.create_date"/>
- </small>
- <h4 class="media-heading" ><a t-attf-href="/blog_post/#{blog_post.category_id.id}/#{blog_post.id}#comment" t-field="blog_post.name"></a></h4>
- <div class="media">
- <div t-field="blog_post.shortened_content"/>
- <small class="pull-left muted text-right">
- <a t-if="len(blog_post.message_ids) <= 1" t-attf-href="/blog/#{blog_post.category_id.id}/#{blog_post.id}#comment"><t t-esc="len(blog_post.message_ids)"/> Comment</a>
- <a t-if="len(blog_post.message_ids) > 1" t-attf-href="/blog/#{blog_post.category_id.id}/#{blog_post.id}#comment"><t t-esc="len(blog_post.message_ids)"/> Comments</a>
- </small>
- </div>
- </div>
- </template>
-
- <template id="blog_post" name="Blog Post">
- <div class="media">
- <div class="media-body">
- <t t-call="website_blog.blog_post_follow"><t t-set="object" t-value="blog_post"/></t>
- <t t-call="website_blog.blog_post_unfollow"><t t-set="object" t-value="blog_post"/></t>
- <t t-call="website.publish"><t t-set="object" t-value="blog_post"/></t>
- <small class="text-muted">
- <t t-field="blog_post.create_uid"/> on <t t-field="blog_post.create_date"/>
- </small>
- <h3 t-field="blog_post.name"/>
- <div t-field="blog_post.content"/>
- </div>
- <ul class="media-list" id="comment">
- <li t-foreach="blog_post.website_message_ids" t-as="message" class="media">
- <div class="media-body">
- <t t-call="website.publish"><t t-set="object" t-value="message"/></t>
- <t t-raw="message.body"/>
- <small class="pull-right muted text-right">
- <div t-field="message.author_id"/>
- <div t-field="message.date"/>
- </small>
- </div>
- </li>
- </ul>
- <form id="blog" t-attf-action="/blog/#{blog_post.category_id.id}/#{blog_post.id}/post#post"
- method="POST" class="form-horizontal text-center"
- groups="group_website_mail_reply">
- <textarea rows="4" placeholder="Your comment" class="col-md-7 form-control"></textarea>
- <button type="submit" class="btn btn-default">Post your comment</button>
- </form>
- </div>
- </template>
-
-
- <!-- Page -->
- <template id="index" name="Blogs" page="True">
- <t t-call="website.layout">
- <t t-set="head">
- <script type="text/javascript" src="/website_blog/static/src/js/blog.js"></script>
- <link rel='stylesheet' href='/website_blog/static/src/css/blog.css'/>
- <t t-raw="head or ''"/>
- </t>
- <t t-set="title">Blog</t>
- <div id="wrap">
- <div class="container mt48 js_website_mail">
- <div class="row">
- <div class="col-md-3" id="left_column">
- <t t-if="category">
- Latests posts on <t t-field="category.name"/>
- <a t-if="editable" t-attf-href="/blog/new" class="btn btn-default">New Blog Post</a>
- <div>
- <form t-attf-action="/blog/#{category.id}/subscribe"
- method="POST" class="form-inline"
- t-if="not category.message_is_follower">
- <div class="col-lg-7">
- <input placeholder="Email Address" type="email" name="email" class="form-control" t-if="is_public_user"/>
- </div>
- <button type="submit" class="btn btn-primary" name="subscribe">Follow</button>
- </form>
- <form t-attf-action="/blog/#{category.id}/unsubscribe"
- method="POST" class="form-inline"
- t-if="category.message_is_follower">
- <input type="hidden" name="email" t-att-value="subscribe" style="display: none"/>
- <button type="submit" class="btn btn-default" name="unsubscribe">Unfollow</button>
- </form>
- </div>
- </t>
- </div>
- <div class="col-md-9" t-if="blog_post">
- <t t-call="website_blog.blog_post"><t t-set="blog_post" t-value="blog_post"/></t>
- </div>
-
- <div class="col-md-8" t-if="not blog_post and blog_posts">
- <ul class="media-list">
- <li t-foreach="blog_posts" t-as="blog_post" data-publish="">
- <t t-call="website_blog.blog_post_short"><t t-set="blog_post" t-value="blog_post"/></t>
- </li>
- </ul>
- <div class="text-center">
- <t t-call="website.pager"/>
- </div>
- </div>
- </div>
- </div>
- </div>
- </t>
- </template>
-
- <template id="blog_author" inherit_id="website_blog.index" inherit_option_id="website_blog.index" name="Author">
-<!-- <xpath expr="//div[@t-field='document_page.create_date']" position="before">
- <div t-field="document_page.author_id"/>
- </xpath>
- <xpath expr="//div[@t-field='blog.create_date']" position="before">
- <div t-field="blog.author_id"/>
- </xpath> -->
- </template>
-
-
- <template id="blog_history" inherit_id="website_blog.index" inherit_option_id="website_blog.index" name="History">
- <xpath expr="//div[@id='left_column']" position="inside">
- <ul class="nav nav-pills nav-stacked">
- <li class="nav-header"><a t-attf-href="/blog/#{category_id}/">Archives</a></li>
- <!-- TODO: check qweb iteration -->
- <li t-foreach="nav_list" t-as="year" class="js_nav_year">
- <t t-set="year" t-value="nav_list[year]"/>
- <a href="#"><t t-esc="year['name']"/> <small>(<t t-esc="year['create_date_count']"/>)</small></a>
- <ul class="nav list-group css_nav_month nav-stacked nav-hierarchy">
- <t t-foreach="year['months']">
- <li class="js_nav_month"><a href="#" t-att-data-domain="__domain"><t t-esc="create_date"/> <small>(<t t-esc="create_date_count"/>)</small></a>
- <ul class="nav list-group nav-stacked nav-hierarchy"/>
- </li>
- </t>
- </ul>
- </li>
- </ul>
- </xpath>
- </template>
- </data>
-</openerp>
_inherit = ['mail.thread']
_order = 'name'
# maximum number of characters to display in summary
- _shorten_max_char = 10
+ _shorten_max_char = 100
def get_shortened_content(self, cr, uid, ids, name, arg, context=None):
res = {}
except Exception:
body_short = False
res[page.id] = body_short
+ print body_short
+ print '-----------------\n\n'
return res
_columns = {
});
$(document).on('click', '.js_follow', function (ev) {
- console.log(ev);
ev.preventDefault();
var $data = $(":first", this).parents("[data-follow]");
var message_is_follower = $data.first().attr("data-follow");