[IMP] website_event: add subscribe option and comments
authorChristophe Matthieu <chm@openerp.com>
Thu, 5 Sep 2013 10:42:12 +0000 (12:42 +0200)
committerChristophe Matthieu <chm@openerp.com>
Thu, 5 Sep 2013 10:42:12 +0000 (12:42 +0200)
bzr revid: chm@openerp.com-20130905104212-m6cybnbif4tsn9t3

addons/website_event/controllers/main.py
addons/website_event/event.py
addons/website_event/views/website_event.xml
addons/website_mail/controllers/main.py
addons/website_mail/mail_message.py
addons/website_mail/views/website_mail.xml

index 92590a9..984b4d1 100644 (file)
@@ -101,9 +101,10 @@ class website_event(http.Controller):
 
     @website.route(['/event/<int:event_id>'], type='http', auth="public")
     def event(self, event_id=None, **post):
-        event = request.registry['event.event'].browse(request.cr, request.uid, event_id, {'show_address': 1})
         values = {
-            'event_id': event,
+            'event_id': request.registry['event.event'].browse(request.cr, request.uid, event_id, {'show_address': 1}),
+            'message_ids': request.registry['event.event'].browse(request.cr, request.uid, event_id).message_ids,
+            'subscribe': post.get('subscribe'),
             'range': range
         }
         return request.webcontext.render("website_event.detail", values)
@@ -154,3 +155,37 @@ class website_event(http.Controller):
         if not _values:
             return werkzeug.utils.redirect("/event/%s/" % event_id)
         return werkzeug.utils.redirect("/shop/checkout")
+
+    @website.route(['/event/<int:event_id>/subscribe'], type='http', auth="public")
+    def subscribe(self, event_id=None, **post):
+        partner_obj = request.registry['res.partner']
+        event_obj = request.registry['event.event']
+        user_obj = request.registry['res.users']
+
+        if event_id and 'subscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
+            if request.webcontext.is_public_user:
+                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
+                if not partner_ids:
+                    partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')})]
+            else:
+                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
+            event_obj.check_access_rule(request.cr, request.uid, [event_id], 'read')
+            event_obj.message_subscribe(request.cr, SUPERUSER_ID, [event_id], partner_ids)
+
+        return self.event(event_id=event_id, subscribe=post.get('email'))
+
+    @website.route(['/event/<int:event_id>/unsubscribe'], type='http', auth="public")
+    def unsubscribe(self, event_id=None, **post):
+        partner_obj = request.registry['res.partner']
+        event_obj = request.registry['event.event']
+        user_obj = request.registry['res.users']
+
+        if event_id and 'unsubscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
+            if request.webcontext.is_public_user:
+                partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))])
+            else:
+                partner_ids = [user_obj.browse(request.cr, request.uid, request.uid).partner_id.id]
+            event_obj.check_access_rule(request.cr, request.uid, [event_id], 'read')
+            event_obj.message_unsubscribe(request.cr, SUPERUSER_ID, [event_id], partner_ids)
+
+        return self.event(event_id=event_id, subscribe=None)
index 80dcb19..05d0327 100644 (file)
@@ -18,9 +18,6 @@ class event(osv.osv):
         'description_website': fields.html('Description for the website'),
     }
 
-class event_event(osv.osv):
-    _inherit = "event.event"
-
     def google_map_img(self, cr, uid, ids, zoom=8, width=298, height=298, context=None):
         partner = self.browse(cr, uid, ids[0], context=context)
         if partner.address_id:
index 433307a..e447230 100644 (file)
             <t t-set="title">Events</t>
             <div class="container">
                 <t t-call="website.publish"><t t-set="object" t-value="event_id"/></t>
-                <h1 class="text-center" t-field="event_id.name"></h1>
-                <span t-if="not event_id.event_ticket_ids" class="label label-default pull-left">No tickets needed.</span>
-                <t t-if="event_id.event_ticket_ids">
-                    <span t-if="event_id.register_avail == 9999" class="label label-default pull-left">Tickets availables.</span>
-                    <span t-if="not event_id.register_avail" class="label label-default pull-left">No ticket available.</span>
-                    <span t-if="event_id.register_avail and event_id.register_avail != 9999" t-attf-class="label label-default pull-left label-#{ event_id.register_avail &lt;= 10 and 'warning' or 'info' }">
-                        <t t-if="event_id.register_avail &lt;= 10">Only</t>
-                        <t t-esc="event_id.register_avail"/>
-                        <t t-if="event_id.register_avail &gt; 1">tickets </t>
-                        <t t-if="event_id.register_avail == 1">ticket </t>
-                        available.
-                    </span>
-                </t>
-                <h4 class="text-center">
-                    <i class="icon-time"></i> <span t-field="event_id.date_begin"/> to 
-                    <span t-field="event_id.date_end"/>
-                </h4>
-                <h5 class="text-center" t-field="event_id.address_id"/>
                 <div class="row">
+                    <div class="col-md-4">
+                        <form action="./subscribe" method="POST" class="form-inline" t-if="not subscribe">
+                            <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">Subscribe</button>
+                        </form>
+                        <form action="./unsubscribe" method="POST" class="form-inline" t-if="subscribe">
+                            <input type="hidden" name="email" t-att-value="subscribe"/>
+                            <button type="submit" class="btn btn-default" name="unsubscribe">Unsubscribe</button>
+                        </form>
+                    </div>
+                        <div class="col-md-8">
+                        <h1 class="text-center" t-field="event_id.name"></h1>
+                        <h4 class="text-center">
+                            <i class="icon-time"></i> <span t-field="event_id.date_begin"/> to 
+                            <span t-field="event_id.date_end"/>
+                        </h4>
+                        <h5 class="text-center" t-field="event_id.address_id"/>
+                    </div>
+
                     <div class="col-md-4 css_noprint">
                         <h4>When &amp; Where</h4>
                         <a t-att-href="event_id.google_map_link()" target="_BLANK">
                         </address>
                     </div>
                     <div class="col-md-8">
-                        <div class="media-body">
-                            <t t-if="event_id.event_ticket_ids">
-                            <hr/>
-                            <form t-attf-action="/event/#{ event_id.id }/add_cart" method="post">
-                                <table class="table">
-                                    <thead>
-                                        <tr>
-                                            <th>Ticket</th>
-                                            <th>Sales End</th>
-                                            <th>Price</th>
-                                            <th>Seats</th>
-                                            <th>Quantity</th>
-                                        </tr>
-                                    </thead>
-                                    <tbody>
-                                        <tr t-foreach="event_id.event_ticket_ids" t-as="ticket">
-                                            <td t-field="ticket.name"/>
-                                            <td t-field="ticket.deadline"/>
-                                            <td t-field="ticket.price"/>
-                                            <td><span t-if="ticket.register_max"><t t-esc="ticket.register_current"/>/<t t-field="ticket.register_max"/></span></td>
-                                            <td>
-                                                <select t-if="ticket.register_avail" t-attf-name="ticket- #{ ticket.id }" class="form-control">
-                                                    <t t-foreach="range(0, ticket.register_avail > 9 and 10 or ticket.register_avail+1 )" t-as="nb"><option t-esc="nb"/></t>
-                                                </select>
-                                                <span t-if="not ticket.register_avail">Not ticket available</span>
-                                            </td>
-                                        </tr>
-                                    </tbody>
-                                </table>
-                                <button type="submit" class="btn btn-primary" t-if="event_id.register_avail">Order Now</button>
-                            </form>
-                            </t>
-                            <hr/>
-                            <div t-field="event_id.description_website"></div>
-                        </div>
+                        <t t-if="event_id.event_ticket_ids">
+                        <hr/>
+                        <form t-attf-action="/event/#{ event_id.id }/add_cart" method="post">
+                            <table class="table">
+                                <thead>
+                                    <tr>
+                                        <th>Ticket</th>
+                                        <th>Sales End</th>
+                                        <th>Price</th>
+                                        <th>Seats</th>
+                                        <th>Quantity</th>
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                    <tr t-foreach="event_id.event_ticket_ids" t-as="ticket">
+                                        <td t-field="ticket.name"/>
+                                        <td t-field="ticket.deadline"/>
+                                        <td t-field="ticket.price"/>
+                                        <td><span t-if="ticket.register_max"><t t-esc="ticket.register_current"/>/<t t-field="ticket.register_max"/></span></td>
+                                        <td>
+                                            <select t-if="ticket.register_avail" t-attf-name="ticket- #{ ticket.id }" class="form-control">
+                                                <t t-foreach="range(0, ticket.register_avail > 9 and 10 or ticket.register_avail+1 )" t-as="nb"><option t-esc="nb"/></t>
+                                            </select>
+                                            <span t-if="not ticket.register_avail">Not ticket available</span>
+                                        </td>
+                                    </tr>
+                                </tbody>
+                            </table>
+                            <button type="submit" class="btn btn-primary" t-if="event_id.register_avail">Order Now</button>
+                        </form>
+                        </t>
+                        <hr/>
+                        <div t-field="event_id.description_website"></div>
+                        <hr/>
+                        <ul class="media-list" id="comment">
+                            <li t-foreach="message_ids" t-as="comment" class="media">
+                                <div class="media-body">
+                                    <t t-call="website.publish"><t t-set="object" t-value="comment"/></t>
+                                    <t t-raw="comment.body"/>
+                                    <small class="pull-right muted text-right">
+                                        <div t-field="comment.author_id"/>
+                                        <div t-field="comment.date"/>
+                                    </small>
+                                </div>
+                            </li>
+                        </ul>
                     </div>
                 </div>
             </div>
index 3bc3e5e..194281f 100644 (file)
@@ -64,7 +64,6 @@ class website_mail(http.Controller):
 
     @website.route(['/blog/<int:mail_group_id>/<int:blog_id>/post'], type='http', auth="public")
     def blog_post(self, mail_group_id=None, blog_id=None, **post):
-        website = request.registry['website']
         url = request.httprequest.host_url
         if post.get('body'):
             request.session.body = post.get('body')
index bd639f7..09e5f45 100644 (file)
@@ -27,9 +27,6 @@ class mail_message(osv.osv):
     _columns = {
         'website_published': fields.boolean('Publish', help="Publish on the website as a blog"),
     }
-    _defaults = {
-        'website_published': lambda *args: True
-    }
 
 
 class mail_group(osv.Model):
index 0a2d117..018f5d0 100644 (file)
                 <div class="row">
                    <div class="col-md-4" id="left_column">
                         <a t-if="mail_group_id and editable" t-attf-href="/blog/#{ mail_group_id }/new" class="btn btn-default">Add a new Blog</a>
-                        <div id="blog_subscribe">
+                        <div>
                             <form action="./subscribe" method="POST" class="form-inline" t-if="not subscribe">
-                                <input placeholder="Email Address" type="email" name="email" class="input-medium" t-if="is_public_user"/>
+                                <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">Subscribe</button>
                             </form>
                             <form action="./unsubscribe" method="POST" class="form-inline" t-if="subscribe">
                                         </small>
                                     </div>
                                 </li>
-                                <form id="post" t-attf-action="/blog/#{ blog_id.res_id }/#{ blog_id.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>
                             </ul>
+                            <form id="post" t-attf-action="/blog/#{ blog_id.res_id }/#{ blog_id.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>
                     </div>