[IMP] website_blog:
authorThibault Delavallée <tde@openerp.com>
Mon, 23 Sep 2013 10:17:30 +0000 (12:17 +0200)
committerThibault Delavallée <tde@openerp.com>
Mon, 23 Sep 2013 10:17:30 +0000 (12:17 +0200)
Some file renaming
Delegated followers of categories / blog posts management to website_mail, allowing to
remove some templates and controllers
Various cleanings and improvements in blog templates

bzr revid: tde@openerp.com-20130923101730-b9606qcyd3sj2pwx

15 files changed:
addons/website_blog/__openerp__.py
addons/website_blog/controllers/main.py
addons/website_blog/static/src/css/Makefile
addons/website_blog/static/src/css/blog.css [deleted file]
addons/website_blog/static/src/css/blog.sass [deleted file]
addons/website_blog/static/src/css/website_blog.css [new file with mode: 0644]
addons/website_blog/static/src/css/website_blog.sass [new file with mode: 0644]
addons/website_blog/static/src/js/blog.js [deleted file]
addons/website_blog/static/src/js/website_blog.js [new file with mode: 0644]
addons/website_blog/views/website_blog_classic.xml [new file with mode: 0644]
addons/website_blog/views/website_blog_templates.xml [new file with mode: 0644]
addons/website_blog/views/website_blog_views.xml [deleted file]
addons/website_blog/views/website_templates.xml [deleted file]
addons/website_blog/website_blog.py
addons/website_mail/static/src/js/website_mail.js

index 104b2f7..8b38698 100644 (file)
@@ -33,8 +33,9 @@ OpenERP Blog
     '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',
@@ -42,7 +43,7 @@ OpenERP Blog
         'security/website_mail.xml',
     ],
     'demo': [
-        'website_blog_demo.xml'
+        # 'website_blog_demo.xml'
     ],
     'test': [
         'test/document_page_test00.yml'
index 564beea..090a4bf 100644 (file)
@@ -59,11 +59,12 @@ class website_mail(http.Controller):
         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)
@@ -129,55 +130,3 @@ class website_mail(http.Controller):
                 '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)
index 5042d6d..f71f4dd 100644 (file)
@@ -1,2 +1,2 @@
 sass:
-       sass --compass --trace -t expanded blog.sass blog.css
+       sass --compass --trace -t expanded website_blog.sass website_blog.css
diff --git a/addons/website_blog/static/src/css/blog.css b/addons/website_blog/static/src/css/blog.css
deleted file mode 100644 (file)
index 5850483..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-.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;
-}
diff --git a/addons/website_blog/static/src/css/blog.sass b/addons/website_blog/static/src/css/blog.sass
deleted file mode 100644 (file)
index b176996..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-@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*/
diff --git a/addons/website_blog/static/src/css/website_blog.css b/addons/website_blog/static/src/css/website_blog.css
new file mode 100644 (file)
index 0000000..5850483
--- /dev/null
@@ -0,0 +1,9 @@
+.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;
+}
diff --git a/addons/website_blog/static/src/css/website_blog.sass b/addons/website_blog/static/src/css/website_blog.sass
new file mode 100644 (file)
index 0000000..8a7c5f3
--- /dev/null
@@ -0,0 +1,9 @@
+@import "compass/css3"
+
+.css_website_mail
+  .has-error
+    border-color: red
+  .css_nav_month
+    display: none
+    &:first-of-type
+      display: block
diff --git a/addons/website_blog/static/src/js/blog.js b/addons/website_blog/static/src/js/blog.js
deleted file mode 100644 (file)
index 4db3726..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-$(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
diff --git a/addons/website_blog/static/src/js/website_blog.js b/addons/website_blog/static/src/js/website_blog.js
new file mode 100644 (file)
index 0000000..ed39817
--- /dev/null
@@ -0,0 +1,43 @@
+$(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
diff --git a/addons/website_blog/views/website_blog_classic.xml b/addons/website_blog/views/website_blog_classic.xml
new file mode 100644 (file)
index 0000000..f341fe7
--- /dev/null
@@ -0,0 +1,172 @@
+<?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>
diff --git a/addons/website_blog/views/website_blog_templates.xml b/addons/website_blog/views/website_blog_templates.xml
new file mode 100644 (file)
index 0000000..c5c2ef0
--- /dev/null
@@ -0,0 +1,143 @@
+<?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) &lt;= 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>
diff --git a/addons/website_blog/views/website_blog_views.xml b/addons/website_blog/views/website_blog_views.xml
deleted file mode 100644 (file)
index f341fe7..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-<?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>
diff --git a/addons/website_blog/views/website_templates.xml b/addons/website_blog/views/website_templates.xml
deleted file mode 100644 (file)
index dddf592..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-<?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) &lt;= 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>
index 63b5b34..92e5f15 100644 (file)
@@ -61,7 +61,7 @@ class BlogPost(osv.Model):
     _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 = {}
@@ -71,6 +71,8 @@ class BlogPost(osv.Model):
             except Exception:
                 body_short = False
             res[page.id] = body_short
+            print body_short
+            print '-----------------\n\n'
         return res
 
     _columns = {
index e40715c..63b9105 100644 (file)
@@ -10,7 +10,6 @@ $(document).ready(function () {
     });
 
     $(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");