Merged trunk-website-ace-ddm
bzr revid: ddm@openerp.com-20130910135801-wlp5u4zvna2q5228
This commit is contained in:
@@ -105,15 +105,17 @@ class Website(openerp.addons.web.controllers.main.Home):
|
||||
view.write(request.cr, request.uid, [view_id],
|
||||
{'inherit_id': view_option_id}, context=request.context)
|
||||
|
||||
return request.webcontext.render('website.themes', {'theme_changed': True})
|
||||
return request.website.render('website.themes', {'theme_changed': True})
|
||||
|
||||
@website.route('/page/<path:path>', type='http', auth="admin")
|
||||
def page(self, path, **kwargs):
|
||||
request.webcontext['path'] = path
|
||||
values = {
|
||||
'path': path,
|
||||
}
|
||||
try:
|
||||
html = request.webcontext.render(path)
|
||||
html = request.website.render(path, values)
|
||||
except ValueError:
|
||||
html = request.webcontext.render('website.404')
|
||||
html = request.website.render('website.404', values)
|
||||
return html
|
||||
|
||||
@website.route('/website/customize_template_toggle', type='json', auth='admin') # FIXME: auth
|
||||
@@ -267,6 +269,6 @@ class Website(openerp.addons.web.controllers.main.Home):
|
||||
|
||||
@website.route(['/website/kanban/'], type='http', auth="public")
|
||||
def kanban(self, **post):
|
||||
return request.registry['website'].kanban_col(**post)
|
||||
return request.website.kanban_col(**post)
|
||||
|
||||
# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -106,13 +106,18 @@ table.editorbar-panel td.selected {
|
||||
left: 0px;
|
||||
right: 0px;
|
||||
bottom: 0px;
|
||||
max-height: 280px;
|
||||
min-height: 140px;
|
||||
background: #282828;
|
||||
box-shadow: 0px 10px 10px -10px black inset;
|
||||
overflow-y: auto;
|
||||
z-index: 100;
|
||||
}
|
||||
.oe_snippets .nav-pills {
|
||||
padding: 3px 8px;
|
||||
background: #444444;
|
||||
}
|
||||
.oe_snippets .nav-pills > li > a {
|
||||
padding: 2px 10px !important;
|
||||
}
|
||||
|
||||
.oe_snippet {
|
||||
display: inline-block;
|
||||
@@ -121,10 +126,10 @@ table.editorbar-panel td.selected {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
border-radius: 3px;
|
||||
margin: 10px;
|
||||
margin: 8px;
|
||||
margin-right: 0px;
|
||||
position: relative;
|
||||
box-shadow: 0px 3px 10px rgba(0, 0, 0, 0.2);
|
||||
box-shadow: 0px 3px 8px rgba(0, 0, 0, 0.2);
|
||||
overflow: hidden;
|
||||
-webkit-user-select: none;
|
||||
user-select: none;
|
||||
|
||||
@@ -98,12 +98,15 @@ table.editorbar-panel
|
||||
left: 0px
|
||||
right: 0px
|
||||
bottom: 0px
|
||||
max-height: 280px
|
||||
min-height: 140px
|
||||
background: rgb(40,40,40)
|
||||
box-shadow: 0px 10px 10px -10px black inset
|
||||
overflow-y: auto
|
||||
z-index: 100
|
||||
.nav-pills
|
||||
padding: 3px 8px
|
||||
background: #444
|
||||
> li > a
|
||||
padding: 2px 10px !important
|
||||
|
||||
.oe_snippet
|
||||
display: inline-block
|
||||
@@ -112,10 +115,10 @@ table.editorbar-panel
|
||||
width: 120px
|
||||
height: 120px
|
||||
border-radius: 3px
|
||||
margin: 10px
|
||||
margin: 8px
|
||||
margin-right: 0px
|
||||
position: relative
|
||||
box-shadow: 0px 3px 10px rgba(0,0,0,0.2)
|
||||
box-shadow: 0px 3px 8px rgba(0,0,0,0.2)
|
||||
overflow: hidden
|
||||
-webkit-user-select: none
|
||||
user-select: none
|
||||
|
||||
@@ -193,6 +193,8 @@ a[data-publish][data-publish='on']:hover .css_published {
|
||||
[data-publish]:not(a) {
|
||||
position: relative;
|
||||
overflow: visible;
|
||||
/*&:hover > [data-publish] */
|
||||
/* display: block */
|
||||
}
|
||||
[data-publish]:not(a) > [data-publish] {
|
||||
position: absolute;
|
||||
@@ -200,6 +202,3 @@ a[data-publish][data-publish='on']:hover .css_published {
|
||||
top: -10px;
|
||||
display: none;
|
||||
}
|
||||
[data-publish]:not(a):hover > [data-publish] {
|
||||
display: block;
|
||||
}
|
||||
|
||||
@@ -156,5 +156,5 @@ a[data-publish]
|
||||
right: -6px
|
||||
top: -10px
|
||||
display: none
|
||||
&:hover > [data-publish]
|
||||
display: block
|
||||
/*&:hover > [data-publish]*/
|
||||
/* display: block*/
|
||||
@@ -118,7 +118,11 @@
|
||||
|
||||
var editor = new website.EditorBar();
|
||||
var $body = $(document.body);
|
||||
editor.prependTo($body);
|
||||
editor.prependTo($body).then(function () {
|
||||
if (location.search.indexOf("unable_editor") >= 0) {
|
||||
editor.edit();
|
||||
}
|
||||
});
|
||||
$body.css('padding-top', '50px'); // Not working properly: editor.$el.outerHeight());
|
||||
};
|
||||
/* ----- TOP EDITOR BAR FOR ADMIN ---- */
|
||||
@@ -241,7 +245,7 @@
|
||||
defs.push(def);
|
||||
});
|
||||
return $.when.apply(null, defs).then(function () {
|
||||
window.location.reload();
|
||||
window.location.href = window.location.href.replace(/unable_editor(=[^&]*)?/, '');
|
||||
});
|
||||
},
|
||||
saveElement: function ($el) {
|
||||
@@ -264,7 +268,7 @@
|
||||
});
|
||||
},
|
||||
cancel: function () {
|
||||
window.location.reload();
|
||||
window.location.href = window.location.href.replace(/unable_editor(=[^&]*)?/, '');
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -189,6 +189,11 @@
|
||||
},
|
||||
drop: function(){
|
||||
var snipped_id = $snippet.data('snippet-id');
|
||||
|
||||
if (!$(".oe_drop_zone.oe_hover").length) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if($snippet.find('.oe_snippet_body').size()){
|
||||
var $toInsert = $snippet.find('.oe_snippet_body').clone();
|
||||
$toInsert.removeClass('oe_snippet_body');
|
||||
|
||||
@@ -72,16 +72,16 @@
|
||||
<ul class="nav navbar-nav navbar-right" id="top_menu">
|
||||
<li><a href="/page/website.contactus">Contact us</a></li>
|
||||
<li><a href="/admin">Sign in</a></li>
|
||||
<li t-if="len(lang_list) > 1" class="dropdown">
|
||||
<li t-if="len(website.language_ids) > 1" class="dropdown">
|
||||
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
|
||||
<t t-esc="lang_selected['name']"/> <span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu">
|
||||
<li t-foreach="lang_list" t-as="lg">
|
||||
<li t-foreach="website.language_ids" t-as="lg">
|
||||
<a href="#" role="menuitem">
|
||||
<strong t-att-class="'icon-check' if lg['code'] == lang_selected['code']
|
||||
<strong t-att-class="'icon-check' if lg.code == lang
|
||||
else 'icon-check-empty'"></strong>
|
||||
<t t-esc="lg['name']"/>
|
||||
<t t-esc="lg.name"/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -183,8 +183,8 @@
|
||||
<section class="container" data-snippet-id="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<h1>Welcome To Your New Homepage,</h1>
|
||||
<h2>where <b>everything</b> can be <em>customized</em></h2>
|
||||
<h1>Your Company Slogan</h1>
|
||||
<h2 class="text-muted">Your company subheader slogan</h2>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
@@ -216,7 +216,8 @@
|
||||
<section class="container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<h2 class="mt48">Ut enim ad minim veniam</h2>
|
||||
<h2>Ut enim ad minim veniam</h2>
|
||||
<h3>Ut enim veniam</h3>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt32">
|
||||
@@ -405,11 +406,188 @@
|
||||
</a>
|
||||
</template>
|
||||
|
||||
<template id="snippets">
|
||||
<ul class="nav nav-pills" t-ignore="true">
|
||||
<li class="active"><a href="#snippet_structure" data-toggle="pill">Structure</a></li>
|
||||
<li><a href="#snippet_content" data-toggle="pill">Content</a></li>
|
||||
<li><a href="#snippet_emphasize" data-toggle="pill">Emphasize</a></li>
|
||||
<li><a href="#snippet_style" data-toggle="pill">Style</a></li>
|
||||
</ul>
|
||||
<div class="pill-content" t-ignore="true">
|
||||
<div class="pill-pane active" id="snippet_structure">
|
||||
|
||||
<div class='oe_snippet' data-snippet-id='title' data-action='insert' data-selector-siblings='#wrap .container'>
|
||||
<div class='oe_snippet_thumbnail oe_label'>
|
||||
Title
|
||||
</div>
|
||||
<section class="oe_snippet_body container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<h1>Inline Editing Made Easy</h1>
|
||||
<h2 class="text-muted">What You See Is What You Get. Really.</h2>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class='oe_snippet' data-snippet-id='jumbotron' data-action='insert' data-selector-siblings='#wrap .container'>
|
||||
<div class='oe_snippet_thumbnail oe_label'>
|
||||
Jumbotron
|
||||
</div>
|
||||
<section class="oe_snippet_body jumbotron">
|
||||
<div class="container">
|
||||
<h1>Sell Online. Easily.</h1>
|
||||
<p>
|
||||
Get your eCommerce website in just a few clicks.
|
||||
</p>
|
||||
<p><a class="btn btn-primary btn-lg" href="/page/website.contactus">Contact us</a></p>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class='oe_snippet' data-snippet-id='' data-action='insert' data-selector-siblings='#wrap .container'>
|
||||
<section class="oe_snippet_body container">
|
||||
<div class="row">
|
||||
<div class="col-md-12 text-center">
|
||||
<h2 class="mt48">Ut enim ad minim veniam</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row mt32">
|
||||
<div class="col-md-4">
|
||||
<img class="img-rounded img-responsive" src="/website/static/src/img/china_thumb.jpg"/>
|
||||
<h4 class="mt16">Cillum Dolore</h4>
|
||||
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
|
||||
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
|
||||
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
||||
consequat.</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<img class="img-rounded img-responsive" src="/website/static/src/img/desert_thumb.jpg"/>
|
||||
<h4 class="mt16">Mollit Anim</h4>
|
||||
<p>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
|
||||
dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
|
||||
proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<img class="img-rounded img-responsive" src="/website/static/src/img/deers_thumb.jpg"/>
|
||||
<h4 class="mt16">Nemo Enim Ipsam</h4>
|
||||
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
|
||||
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore
|
||||
veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim
|
||||
ipsam voluptatem quia voluptas</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class='oe_snippet' name='Header' data-action='insert' data-selector-siblings='#wrap .container'>
|
||||
<section class="container oe_snippet_body">
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
<h2>
|
||||
A great experience.
|
||||
</h2>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
|
||||
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
|
||||
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
||||
consequat.
|
||||
</p>
|
||||
<div>
|
||||
<a href="http://www.openerp.com/start" class="btn btn-default mt16 btn-lg btn-primary">Call To <em>Action</em></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-md-5 col-lg-offset-1">
|
||||
<img class="img-rounded img-responsive" src="/website/static/src/img/island.jpg"/>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class='oe_snippet' name='Header' data-action='insert' data-selector-siblings='#wrap .container'>
|
||||
<section class="container oe_snippet_body">
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<img class="img-rounded img-responsive" src="/website/static/src/img/island.jpg"/>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-offset-1">
|
||||
<h2>
|
||||
A great experience.
|
||||
</h2>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
|
||||
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
|
||||
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
||||
consequat.
|
||||
</p>
|
||||
<div>
|
||||
<a href="http://www.openerp.com/start" class="btn btn-default mt16 btn-lg btn-primary">Call To <em>Action</em></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
<div class='oe_snippet' name='Header' data-action='insert' data-selector-siblings='#wrap .container'>
|
||||
<section class="container oe_snippet_body">
|
||||
<div class="row">
|
||||
<div class="col-md-5">
|
||||
<img class="img-rounded img-responsive" src="/website/static/src/img/island.jpg"/>
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-offset-1">
|
||||
<h2>
|
||||
A great experience.
|
||||
</h2>
|
||||
<p>
|
||||
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
|
||||
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
|
||||
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
|
||||
consequat.
|
||||
</p>
|
||||
<div>
|
||||
<a href="http://www.openerp.com/start" class="btn btn-default mt16 btn-lg btn-primary">Call To <em>Action</em></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="pill-pane" id="snippet_content">
|
||||
|
||||
<div class='oe_snippet' data-snippet-id='spacer' data-action='insert' data-selector-siblings='#wrap .container'>
|
||||
<div class='oe_snippet_thumbnail oe_label'>Spacer</div>
|
||||
<div class="oe_snippet_body container mt32"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="pill-pane" id="snippet_emphasize">
|
||||
|
||||
<div class='oe_snippet' data-snippet-id='surprise' data-action='mutate' data-selector='#wrap .container' data-action-function='openerp.website.mutations.vomify'>
|
||||
<div class='oe_snippet_thumbnail oe_label' style='background-image:radial-gradient(red,orange,yellow,green,blue);'>Surprise!</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="pill-pane" id="snippet_style">
|
||||
|
||||
<div class='oe_snippet' data-snippet-id='darken' data-action='mutate' data-selector='#wrap .container' data-action-function='openerp.website.mutations.darken'>
|
||||
<div class='oe_snippet_thumbnail oe_label'>Darken</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<template id="kanban">
|
||||
<t t-set="step"><t t-esc="step or 0"/></t>
|
||||
<t t-set="scope"><t t-esc="scope or 0"/></t>
|
||||
<t t-set="orderby"><t t-esc="orderby or 'name'"/></t>
|
||||
<t t-raw="snipped['kanban'](model, domain, column, template, step=step, scope=scope, orderby=orderby)"/>
|
||||
<t t-raw="website.kanban(model, domain, column, template, step=step, scope=scope, orderby=orderby)"/>
|
||||
</template>
|
||||
|
||||
<template id="kanban_contain">
|
||||
|
||||
+66
-115
@@ -5,7 +5,6 @@ import simplejson
|
||||
import openerp
|
||||
from openerp.osv import osv, fields
|
||||
from openerp.addons.web import http
|
||||
from openerp.addons.web.controllers import main
|
||||
from openerp.addons.web.http import request
|
||||
import urllib
|
||||
import math
|
||||
@@ -21,10 +20,10 @@ def route(*route_args, **route_kwargs):
|
||||
@http.route(*route_args, **route_kwargs)
|
||||
@functools.wraps(f, assigned=functools.WRAPPER_ASSIGNMENTS + ('func_name',))
|
||||
def wrap(*args, **kwargs):
|
||||
if not hasattr(request, 'webcontext'):
|
||||
request.webcontext = WebContext()
|
||||
request.context['lang'] = request.webcontext['lang_selected']['code']
|
||||
|
||||
request.route_lang = None # WIP: decorator will support lang argument
|
||||
if not hasattr(request, 'website'):
|
||||
request.website = request.registry['website'].get_current()
|
||||
request.website.preprocess_request(*args, **kwargs)
|
||||
return f(*args, **kwargs)
|
||||
return wrap
|
||||
return decorator
|
||||
@@ -46,31 +45,15 @@ def urlplus(url, params):
|
||||
url += "%s=%s&" % (k, urllib.quote_plus(str(v)))
|
||||
return url
|
||||
|
||||
class WebsiteError(Exception):
|
||||
pass
|
||||
|
||||
class WebContext(dict):
|
||||
def __init__(self):
|
||||
self.website = request.registry.get("website")
|
||||
lang = request.httprequest.host.split('.')[0]
|
||||
context = self.website.get_webcontext(lang=lang)
|
||||
dict.__init__(self, context)
|
||||
def __getattr__(self, name):
|
||||
if hasattr(self.website, name):
|
||||
return getattr(self.website, name)
|
||||
elif name in self:
|
||||
return self[name]
|
||||
else:
|
||||
raise AttributeError
|
||||
def render(self, template, values=None):
|
||||
context = self.copy()
|
||||
if values:
|
||||
context.update(values)
|
||||
return self.website.render(template, context)
|
||||
|
||||
class website(osv.osv):
|
||||
_name = "website" # Avoid website.website convention for conciseness (for new api). Got a special authorization from xmo and rco
|
||||
_description = "Website"
|
||||
_columns = {
|
||||
'name': fields.char('Domain'),
|
||||
'company_id': fields.many2one('res.company', string="Company"),
|
||||
'language_ids': fields.many2many('res.lang', 'website_lang_rel', 'website_id', 'lang_id', 'Languages'),
|
||||
'default_lang_id': fields.many2one('res.lang', string="Default language"),
|
||||
}
|
||||
|
||||
public_user = None
|
||||
|
||||
@@ -80,100 +63,78 @@ class website(osv.osv):
|
||||
self.public_user = request.registry[ref[0]].browse(request.cr, openerp.SUPERUSER_ID, ref[1])
|
||||
return self.public_user
|
||||
|
||||
def get_lang_info(self, lang):
|
||||
fields = ['id', 'name', 'code', 'website_default']
|
||||
lang_obj = request.registry['res.lang']
|
||||
languages = lang_obj.search_read(
|
||||
request.cr, openerp.SUPERUSER_ID, [('website_activated', '=', True)], fields
|
||||
)
|
||||
activated = [lg['code'].lower() for lg in languages]
|
||||
default = [lg['code'] for lg in languages if lg['website_default']]
|
||||
default = default[0] if default else None
|
||||
def get_lang(self):
|
||||
website = request.registry['website'].get_current()
|
||||
|
||||
# Try to get the language from cookie
|
||||
lang = lang or request.httprequest.cookies.get('lang', None)
|
||||
if not lang or lang not in activated:
|
||||
# Try to get the default language
|
||||
if default:
|
||||
lang = default
|
||||
# Otherwise get the first activated language
|
||||
elif activated:
|
||||
lang = activated[0]
|
||||
# Otherwise the language setup is broken
|
||||
else:
|
||||
raise WebsiteError("Could not aquire default language")
|
||||
if hasattr(request, 'route_lang'):
|
||||
lang = request.route_lang
|
||||
else:
|
||||
lang = request.params.get('lang', None) or request.httprequest.cookies.get('lang', None)
|
||||
|
||||
return {
|
||||
'lang_list': languages,
|
||||
'lang_default': default,
|
||||
'lang_selected': (lg for lg in languages if lg['code'].lower() == lang.lower()).next(),
|
||||
}
|
||||
if lang not in [lg.code for lg in website.language_ids]:
|
||||
lang = website.default_lang_id.code
|
||||
|
||||
def get_webcontext(self, additional_values=None, lang=None):
|
||||
debug = 'debug' in request.params
|
||||
is_logged = True
|
||||
try:
|
||||
request.session.check_security()
|
||||
except: # TODO fme: check correct exception
|
||||
is_logged = False
|
||||
return lang
|
||||
|
||||
def preprocess_request(self, cr, uid, ids, *args, **kwargs):
|
||||
is_public_user = request.uid == self.get_public_user().id
|
||||
|
||||
values = {
|
||||
'debug': debug,
|
||||
request.context.update({
|
||||
'is_public_user': is_public_user,
|
||||
'editable': is_logged and not is_public_user,
|
||||
'request': request,
|
||||
'registry': request.registry,
|
||||
'cr': request.cr,
|
||||
'uid': request.uid,
|
||||
'host_url': request.httprequest.host_url,
|
||||
'res_company': request.registry['res.company'].browse(request.cr, openerp.SUPERUSER_ID, 1),
|
||||
'json': simplejson,
|
||||
'snipped': {
|
||||
'kanban': self.kanban
|
||||
},
|
||||
}
|
||||
values.update(self.get_lang_info(lang))
|
||||
'editable': not is_public_user, # TODO: check perms
|
||||
})
|
||||
request.context['lang'] = self.get_lang()
|
||||
|
||||
if additional_values:
|
||||
values.update(additional_values)
|
||||
return values
|
||||
def get_current(self):
|
||||
# WIP, currently hard coded
|
||||
return self.browse(request.cr, request.uid, 1)
|
||||
|
||||
def render(self, template, values=None):
|
||||
def render(self, cr, uid, ids, template, values=None):
|
||||
view = request.registry.get("ir.ui.view")
|
||||
IMD = request.registry.get("ir.model.data")
|
||||
|
||||
if not values:
|
||||
qweb_context = request.context.copy()
|
||||
|
||||
if values is None:
|
||||
values = {}
|
||||
|
||||
values.update({
|
||||
'request': request,
|
||||
'registry': request.registry,
|
||||
'json': simplejson,
|
||||
'website': request.website,
|
||||
'res_company': request.website.company_id,
|
||||
})
|
||||
|
||||
qweb_context.update(values)
|
||||
context = {
|
||||
'inherit_branding': values.get('editable', False),
|
||||
'inherit_branding': qweb_context.get('editable', False),
|
||||
}
|
||||
|
||||
# check if xmlid of the template exists
|
||||
try:
|
||||
model, xmlid = template.split('.', 1)
|
||||
model, id = IMD.get_object_reference(request.cr, request.uid, model, xmlid)
|
||||
model, id = IMD.get_object_reference(cr, uid, model, xmlid)
|
||||
except ValueError:
|
||||
logger.error("Website Rendering Error.\n\n%s" % traceback.format_exc())
|
||||
return self.render('website.404', values)
|
||||
|
||||
return self.render('website.404', qweb_context)
|
||||
|
||||
# render template and catch error
|
||||
try:
|
||||
return view.render(request.cr, request.uid, template, values, context=context)
|
||||
return view.render(cr, uid, template, qweb_context, context=context)
|
||||
except (AccessError, AccessDenied), err:
|
||||
logger.error(err)
|
||||
values['error'] = err[1]
|
||||
qweb_context['error'] = err[1]
|
||||
logger.warn("Website Rendering Error.\n\n%s" % traceback.format_exc())
|
||||
return self.render('website.401', values)
|
||||
return self.render('website.401', qweb_context)
|
||||
except Exception:
|
||||
values['traceback'] = traceback.format_exc()
|
||||
logger.error("Website Rendering Error.\n\n%s" % values['traceback'])
|
||||
if values['editable']:
|
||||
return view.render(request.cr, request.uid, 'website.500', values, context=context)
|
||||
qweb_context['traceback'] = traceback.format_exc()
|
||||
logger.error("Website Rendering Error.\n\n%s" % qweb_context['traceback'])
|
||||
if qweb_context['editable']:
|
||||
return view.render(cr, uid, 'website.500', qweb_context, context=context)
|
||||
else:
|
||||
return view.render(request.cr, request.uid, 'website.404', values, context=context)
|
||||
return view.render(cr, uid, 'website.404', qweb_context, context=context)
|
||||
|
||||
def pager(self, url, total, page=1, step=30, scope=5, url_args=None):
|
||||
def pager(self, cr, uid, ids, url, total, page=1, step=30, scope=5, url_args=None):
|
||||
# Compute Pager
|
||||
page_count = int(math.ceil(float(total) / step))
|
||||
|
||||
@@ -228,7 +189,7 @@ class website(osv.osv):
|
||||
if xids[view['id']]
|
||||
]
|
||||
|
||||
def kanban(self, model, domain, column, template, step=None, scope=None, orderby=None):
|
||||
def kanban(self, cr, uid, ids, model, domain, column, template, step=None, scope=None, orderby=None):
|
||||
step = step and int(step) or 10
|
||||
scope = scope and int(scope) or 5
|
||||
orderby = orderby or "name"
|
||||
@@ -249,12 +210,12 @@ class website(osv.osv):
|
||||
pages[int(col[0])] = int(col[1])
|
||||
|
||||
objects = []
|
||||
for group in model_obj.read_group(request.cr, request.uid, domain, ["id", column], groupby=column):
|
||||
for group in model_obj.read_group(cr, uid, domain, ["id", column], groupby=column):
|
||||
obj = {}
|
||||
|
||||
# browse column
|
||||
relation_id = group[column][0]
|
||||
obj['column_id'] = relation_obj.browse(request.cr, request.uid, relation_id)
|
||||
obj['column_id'] = relation_obj.browse(cr, uid, relation_id)
|
||||
|
||||
obj['kanban_url'] = kanban_url
|
||||
for k, v in pages.items():
|
||||
@@ -262,7 +223,7 @@ class website(osv.osv):
|
||||
obj['kanban_url'] += "%s-%s" % (k, v)
|
||||
|
||||
# pager
|
||||
number = model_obj.search(request.cr, request.uid, group['__domain'], count=True)
|
||||
number = model_obj.search(cr, uid, group['__domain'], count=True)
|
||||
obj['page_count'] = int(math.ceil(float(number) / step))
|
||||
obj['page'] = pages.get(relation_id) or 1
|
||||
if obj['page'] > obj['page_count']:
|
||||
@@ -278,8 +239,8 @@ class website(osv.osv):
|
||||
obj['orderby'] = orderby
|
||||
|
||||
# browse objects
|
||||
object_ids = model_obj.search(request.cr, request.uid, group['__domain'], limit=step, offset=offset, order=orderby)
|
||||
obj['object_ids'] = model_obj.browse(request.cr, request.uid, object_ids)
|
||||
object_ids = model_obj.search(cr, uid, group['__domain'], limit=step, offset=offset, order=orderby)
|
||||
obj['object_ids'] = model_obj.browse(cr, uid, object_ids)
|
||||
|
||||
objects.append(obj)
|
||||
|
||||
@@ -288,30 +249,20 @@ class website(osv.osv):
|
||||
'range': range,
|
||||
'template': template,
|
||||
}
|
||||
return request.webcontext.render("website.kanban_contain", values)
|
||||
return request.website.render("website.kanban_contain", values)
|
||||
|
||||
def kanban_col(self, model, domain, page, template, step, orderby):
|
||||
def kanban_col(self, cr, uid, ids, model, domain, page, template, step, orderby):
|
||||
html = ""
|
||||
model_obj = request.registry[model]
|
||||
domain = safe_eval(domain)
|
||||
step = int(step)
|
||||
offset = (int(page)-1) * step
|
||||
object_ids = model_obj.search(request.cr, request.uid, domain, limit=step, offset=offset, order=orderby)
|
||||
object_ids = model_obj.browse(request.cr, request.uid, object_ids)
|
||||
object_ids = model_obj.search(cr, uid, domain, limit=step, offset=offset, order=orderby)
|
||||
object_ids = model_obj.browse(cr, uid, object_ids)
|
||||
for object_id in object_ids:
|
||||
html += request.webcontext.render(template, {'object_id': object_id})
|
||||
html += request.website.render(template, {'object_id': object_id})
|
||||
return html
|
||||
|
||||
class res_lang(osv.osv):
|
||||
_inherit = "res.lang"
|
||||
|
||||
_columns = {
|
||||
'website_activated': fields.boolean('Active on website'),
|
||||
'website_default': fields.boolean('Website default language'),
|
||||
}
|
||||
|
||||
# TODO: on write and create set website_default=False on other records if current is True
|
||||
|
||||
class res_partner(osv.osv):
|
||||
_inherit = "res.partner"
|
||||
|
||||
|
||||
@@ -1,35 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="res_lang_tree" model="ir.ui.view">
|
||||
<field name="name">res.lang.tree website</field>
|
||||
<field name="model">res.lang</field>
|
||||
<field name="inherit_id" ref="base.res_lang_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="active" position="after">
|
||||
<field name="website_activated"/>
|
||||
<field name="website_default"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="res_lang_form" model="ir.ui.view">
|
||||
<field name="name">res.lang.form website</field>
|
||||
<field name="model">res.lang</field>
|
||||
<field name="inherit_id" ref="base.res_lang_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="active" position="after">
|
||||
<field name="website_activated"/>
|
||||
<field name="website_default"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
|
||||
<data noupdate="1">
|
||||
<record id="base.lang_en" model="res.lang">
|
||||
<field name="website_activated">True</field>
|
||||
<field name="website_default">True</field>
|
||||
<record id="default_website" model="website">
|
||||
<field name="name">www.dundermufflin.com</field>
|
||||
<field name="company_id" ref="base.main_company"/>
|
||||
<field name="language_ids" eval="[(6, 0, [ ref('base.lang_en')])]"/>
|
||||
<field name="default_lang_id" ref="base.lang_en"/>
|
||||
</record>
|
||||
|
||||
<record id="public_user" model="res.users">
|
||||
|
||||
@@ -11,7 +11,6 @@ class website_contract(http.Controller):
|
||||
|
||||
@website.route(['/references/', '/references/page/<int:page>/'], type='http', auth="public")
|
||||
def references(self, page=0, **post):
|
||||
website = request.registry['website']
|
||||
partner_obj = request.registry['res.partner']
|
||||
account_obj = request.registry['account.analytic.account']
|
||||
|
||||
@@ -31,10 +30,10 @@ class website_contract(http.Controller):
|
||||
# public partner profile
|
||||
partner_ids = partner_obj.search(
|
||||
request.cr, openerp.SUPERUSER_ID,
|
||||
domain + [('website_published', '=', True)], request.context)
|
||||
domain + [('website_published', '=', True)], context=request.context)
|
||||
google_map_partner_ids = ",".join([str(p) for p in partner_ids])
|
||||
|
||||
if not request.webcontext.is_public_user:
|
||||
if not request.context['is_public_user']:
|
||||
# search without website_published
|
||||
partner_ids += partner_obj.search(request.cr, request.uid,
|
||||
domain, context=request.context)
|
||||
@@ -49,7 +48,7 @@ class website_contract(http.Controller):
|
||||
countries.insert(0, {
|
||||
'country_id_count': country_count,
|
||||
'country_id': ("all", _("All Countries"))
|
||||
}, context=request.context)
|
||||
})
|
||||
|
||||
if post.get("country", "all") != 'all':
|
||||
partner_ids = partner_obj.search(
|
||||
@@ -60,7 +59,7 @@ class website_contract(http.Controller):
|
||||
], context=request.context)
|
||||
|
||||
step = 20
|
||||
pager = website.pager(url="/references/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
|
||||
pager = request.website.pager(url="/references/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
|
||||
partner_ids = partner_obj.search(
|
||||
request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)],
|
||||
limit=step, offset=pager['offset'], context=request.context)
|
||||
@@ -74,7 +73,7 @@ class website_contract(http.Controller):
|
||||
'searches': post,
|
||||
'search_path': "?%s" % urllib.urlencode(post),
|
||||
}
|
||||
return request.webcontext.render("website_contract.index", values)
|
||||
return request.website.render("website_contract.index", values)
|
||||
|
||||
@website.route(['/references/<int:ref_id>/'], type='http', auth="public")
|
||||
def references_ref(self, ref_id=0, **post):
|
||||
@@ -84,12 +83,15 @@ class website_contract(http.Controller):
|
||||
('website_published', '=', True),
|
||||
('id', '=', ref_id)
|
||||
], context=request.context)
|
||||
if not request.webcontext.is_public_user:
|
||||
if not request.context['is_public_user']:
|
||||
partner_ids += partner_obj.search(
|
||||
request.cr, request.uid, [('id', '=', ref_id)],
|
||||
context=request.context)
|
||||
|
||||
request.webcontext['partner_id'] = partner_obj.browse(
|
||||
request.cr, openerp.SUPERUSER_ID, partner_ids[0],
|
||||
dict(request.context + {'show_address': True}))
|
||||
return request.webcontext.render("website_contract.details")
|
||||
values = {
|
||||
'partner_id': partner_obj.browse(
|
||||
request.cr, openerp.SUPERUSER_ID, partner_ids[0],
|
||||
dict(request.context, show_address=True)),
|
||||
}
|
||||
|
||||
return request.website.render("website_contract.details", values)
|
||||
|
||||
@@ -13,10 +13,10 @@ class contactus(http.Controller):
|
||||
post['user_id'] = False
|
||||
request.registry['crm.lead'].create(request.cr, request.uid,
|
||||
post, request.context)
|
||||
company = request.webcontext['res_company']
|
||||
company = request.website.company_id
|
||||
values = {
|
||||
'google_map_url': "http://maps.googleapis.com/maps/api/staticmap?center=%s&sensor=false&zoom=8&size=298x298" % quote_plus('%s, %s %s, %s' % (company.street, company.city, company.zip, company.country_id and company.country_id.name_get()[0][1] or ''))
|
||||
}
|
||||
return request.webcontext.render("website_crm.thanks", values)
|
||||
return request.website.render("website_crm.thanks", values)
|
||||
|
||||
# vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4:
|
||||
|
||||
@@ -11,7 +11,6 @@ class website_crm_partner_assign(http.Controller):
|
||||
|
||||
@website.route(['/partners/', '/partners/page/<int:page>/'], type='http', auth="public")
|
||||
def partners(self, page=0, **post):
|
||||
website = request.registry['website']
|
||||
partner_obj = request.registry['res.partner']
|
||||
|
||||
def dom_without(without):
|
||||
@@ -66,7 +65,7 @@ class website_crm_partner_assign(http.Controller):
|
||||
})
|
||||
|
||||
step = 20
|
||||
pager = website.pager(url="/partners/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
|
||||
pager = request.website.pager(url="/partners/", total=len(partner_ids), page=page, step=step, scope=7, url_args=post)
|
||||
partner_ids = partner_obj.search(
|
||||
request.cr, openerp.SUPERUSER_ID, [('id', 'in', partner_ids)],
|
||||
context=request.context, limit=step, offset=pager['offset'],
|
||||
@@ -83,7 +82,7 @@ class website_crm_partner_assign(http.Controller):
|
||||
'searches': post,
|
||||
'search_path': "?%s" % urllib.urlencode(post),
|
||||
}
|
||||
return request.webcontext.render("website_crm_partner_assign.index", values)
|
||||
return request.website.render("website_crm_partner_assign.index", values)
|
||||
|
||||
@website.route(['/partners/<int:ref_id>/'], type='http', auth="public")
|
||||
def partners_ref(self, ref_id=0, **post):
|
||||
@@ -93,13 +92,15 @@ class website_crm_partner_assign(http.Controller):
|
||||
[('website_published', '=', True), ('id', '=', ref_id)],
|
||||
context=request.context)
|
||||
|
||||
if not request.webcontext.is_public_user:
|
||||
if not request.context['is_public_user']:
|
||||
partner_ids += partner_obj.search(
|
||||
request.cr, request.uid, [('id', '=', ref_id)],
|
||||
context=request.context)
|
||||
|
||||
request.webcontext['partner_id'] = partner_obj.browse(
|
||||
request.cr, openerp.SUPERUSER_ID, partner_ids[0],
|
||||
context=dict(request.context + {'show_address': True}))
|
||||
values = {
|
||||
'partner_id': partner_obj.browse(
|
||||
request.cr, openerp.SUPERUSER_ID, partner_ids[0],
|
||||
context=dict(request.context, show_address=True)),
|
||||
}
|
||||
|
||||
return request.webcontext.render("website_crm_partner_assign.details")
|
||||
return request.website.render("website_crm_partner_assign.details", values)
|
||||
|
||||
@@ -18,7 +18,6 @@ class website_event(http.Controller):
|
||||
|
||||
@website.route(['/event/', '/event/page/<int:page>/'], type='http', auth="public")
|
||||
def events(self, page=1, **searches):
|
||||
website = request.registry['website']
|
||||
event_obj = request.registry['event.event']
|
||||
|
||||
searches.setdefault('date', 'all')
|
||||
@@ -102,7 +101,7 @@ class website_event(http.Controller):
|
||||
event_count = event_obj.search(
|
||||
request.cr, request.uid, dom_without("none"), count=True,
|
||||
context=request.context)
|
||||
pager = website.pager(url="/event/", total=event_count, page=page, step=step, scope=5)
|
||||
pager = request.website.pager(url="/event/", total=event_count, page=page, step=step, scope=5)
|
||||
obj_ids = event_obj.search(
|
||||
request.cr, request.uid, dom_without("none"), limit=step,
|
||||
offset=pager['offset'], order="date_begin DESC", context=request.context)
|
||||
@@ -119,20 +118,19 @@ class website_event(http.Controller):
|
||||
'search_path': "?%s" % urllib.urlencode(searches),
|
||||
}
|
||||
|
||||
return request.webcontext.render("website_event.index", values)
|
||||
return request.website.render("website_event.index", values)
|
||||
|
||||
@website.route(['/event/<int:event_id>'], type='http', auth="public")
|
||||
def event(self, event_id=None, **post):
|
||||
event_obj = request.registry['event.event']
|
||||
values = {
|
||||
'event_id': event_obj.browse(
|
||||
request.cr, request.uid, event_id,
|
||||
dict(request.context, show_address=1)),
|
||||
'event_id': event_obj.browse(request.cr, request.uid, event_id,
|
||||
dict(request.context, show_address=1)),
|
||||
'message_ids': event_obj.browse(request.cr, request.uid, event_id, request.context).message_ids,
|
||||
'subscribe': post.get('subscribe'),
|
||||
'range': range
|
||||
}
|
||||
return request.webcontext.render("website_event.detail", values)
|
||||
return request.website.render("website_event.detail", values)
|
||||
|
||||
@website.route(['/event/<int:event_id>/add_cart'], type='http', auth="public")
|
||||
def add_cart(self, event_id=None, **post):
|
||||
@@ -140,7 +138,7 @@ class website_event(http.Controller):
|
||||
order_line_obj = request.registry.get('sale.order.line')
|
||||
ticket_obj = request.registry.get('event.event.ticket')
|
||||
|
||||
order = request.webcontext['order']
|
||||
order = request.context['order'] # FIXME: namespace global rendering vars: website_sale_order
|
||||
if not order:
|
||||
order = website_sale.controllers.main.get_order()
|
||||
|
||||
@@ -191,8 +189,8 @@ class website_event(http.Controller):
|
||||
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:
|
||||
if event_id and 'subscribe' in post and (post.get('email') or not request.context['is_public_user']):
|
||||
if request.context['is_public_user']:
|
||||
partner_ids = partner_obj.search(
|
||||
request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))],
|
||||
context=request.context)
|
||||
@@ -220,8 +218,8 @@ class website_event(http.Controller):
|
||||
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:
|
||||
if event_id and 'unsubscribe' in post and (post.get('email') or not request.context['is_public_user']):
|
||||
if request.context['is_public_user']:
|
||||
partner_ids = partner_obj.search(
|
||||
request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))],
|
||||
context=request.context)
|
||||
|
||||
@@ -16,7 +16,7 @@ class google_map(http.Controller):
|
||||
'height': post.get('height', 460),
|
||||
'partner_url': post.get('partner_url'),
|
||||
}
|
||||
return request.webcontext.render("website_google_map.google_map", values)
|
||||
return request.website.render("website_google_map.google_map", values)
|
||||
|
||||
@website.route(['/google_map/partners.json'], type='http', auth="admin")
|
||||
def google_map_data(self, *arg, **post):
|
||||
@@ -26,7 +26,7 @@ class google_map(http.Controller):
|
||||
domain_public = domain + [('website_published', '=', True)]
|
||||
partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID,
|
||||
domain_public, context=request.context)
|
||||
if not request.webcontext.is_public_user:
|
||||
if not request.context['is_public_user']:
|
||||
partner_ids += partner_obj.search(request.cr, request.uid, domain,
|
||||
context=request.context)
|
||||
partner_ids = list(set(partner_ids))
|
||||
@@ -42,7 +42,7 @@ class google_map(http.Controller):
|
||||
latitude = post.get('latitude') and float(post['latitude'])
|
||||
longitude = post.get('longitude') and float(post['longitude'])
|
||||
|
||||
if not request.webcontext.is_public_user and partner_id and (latitude or longitude):
|
||||
if not request.context['is_public_user'] and partner_id and (latitude or longitude):
|
||||
values = {
|
||||
'partner_latitude': latitude,
|
||||
'partner_longitude': longitude,
|
||||
|
||||
@@ -15,4 +15,4 @@ class website_hr(http.Controller):
|
||||
'employee_ids': hr_obj.browse(request.cr, request.uid, employee_ids,
|
||||
request.context)
|
||||
}
|
||||
return request.webcontext.render("website.aboutus", values)
|
||||
return request.website.render("website.aboutus", values)
|
||||
|
||||
@@ -17,7 +17,6 @@ class website_mail(http.Controller):
|
||||
@website.route(['/blog/', '/blog/<int:mail_group_id>/', '/blog/<int:mail_group_id>/<int:blog_id>/',
|
||||
'/blog/page/<int:page>/', '/blog/<int:mail_group_id>/page/<int:page>/', '/blog/<int:mail_group_id>/<int:blog_id>/page/<int:page>/'], type='http', auth="public")
|
||||
def blog(self, mail_group_id=None, blog_id=None, page=0, **post):
|
||||
website = request.registry['website']
|
||||
group_obj = request.registry['mail.group']
|
||||
message_obj = request.registry['mail.message']
|
||||
user_obj = request.registry['res.users']
|
||||
@@ -28,10 +27,9 @@ class website_mail(http.Controller):
|
||||
'nav_list': dict(),
|
||||
'mail_group_id': mail_group_id,
|
||||
'subscribe': post.get('subscribe'),
|
||||
'website': website,
|
||||
}
|
||||
|
||||
if not request.webcontext.is_public_user and mail_group_id:
|
||||
if not request.context['is_public_user'] and mail_group_id:
|
||||
message_follower_ids = group_obj.read(request.cr, request.uid, [mail_group_id], ['message_follower_ids'], request.context)[0]['message_follower_ids']
|
||||
parent_id = user_obj.browse(request.cr, SUPERUSER_ID, request.uid, request.context).partner_id.id
|
||||
values['subscribe'] = parent_id in message_follower_ids
|
||||
@@ -50,12 +48,12 @@ class website_mail(http.Controller):
|
||||
else:
|
||||
step = 20
|
||||
message_count = len(group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", context=request.context))
|
||||
pager = website.pager(url="/blog/%s/" % mail_group_id, total=message_count, page=page, step=step, scope=7)
|
||||
pager = request.website.pager(url="/blog/%s/" % mail_group_id, total=message_count, page=page, step=step, scope=7)
|
||||
message_ids = group_obj.get_public_message_ids(request.cr, request.uid, domain=domain, order="create_date desc", limit=step, offset=pager['offset'], context=request.context)
|
||||
values['pager'] = pager
|
||||
values['blog_ids'] = message_obj.browse(request.cr, request.uid, message_ids, request.context)
|
||||
|
||||
return request.webcontext.render("website_mail.index", values)
|
||||
return request.website.render("website_mail.index", values)
|
||||
|
||||
@website.route(['/blog/nav'], type='http', auth="public")
|
||||
def nav(self, **post):
|
||||
@@ -67,7 +65,7 @@ class website_mail(http.Controller):
|
||||
url = request.httprequest.host_url
|
||||
if post.get('body'):
|
||||
request.session.body = post.get('body')
|
||||
if request.webcontext.is_public_user:
|
||||
if request.context['is_public_user']:
|
||||
return '%s/admin#action=redirect&url=%s/blog/%s/%s/post' % (url, url, mail_group_id, blog_id)
|
||||
|
||||
if 'body' in request.session and request.session.body:
|
||||
@@ -102,8 +100,8 @@ class website_mail(http.Controller):
|
||||
group_obj = request.registry['mail.group']
|
||||
user_obj = request.registry['res.users']
|
||||
|
||||
if mail_group_id and 'subscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
|
||||
if request.webcontext.is_public_user:
|
||||
if mail_group_id and 'subscribe' in post and (post.get('email') or not request.context['is_public_user']):
|
||||
if request.context['is_public_user']:
|
||||
partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))], context=request.context)
|
||||
if not partner_ids:
|
||||
partner_ids = [partner_obj.create(request.cr, SUPERUSER_ID, {"email": post.get('email'), "name": "Subscribe: %s" % post.get('email')}, request.context)]
|
||||
@@ -120,8 +118,8 @@ class website_mail(http.Controller):
|
||||
group_obj = request.registry['mail.group']
|
||||
user_obj = request.registry['res.users']
|
||||
|
||||
if mail_group_id and 'unsubscribe' in post and (post.get('email') or not request.webcontext.is_public_user):
|
||||
if request.webcontext.is_public_user:
|
||||
if mail_group_id and 'unsubscribe' in post and (post.get('email') or not request.context['is_public_user']):
|
||||
if request.context['is_public_user']:
|
||||
partner_ids = partner_obj.search(request.cr, SUPERUSER_ID, [("email", "=", post.get('email'))], context=request.context)
|
||||
else:
|
||||
partner_ids = [user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id]
|
||||
|
||||
@@ -11,7 +11,6 @@ class website_crm_partner_assign(http.Controller):
|
||||
|
||||
@website.route(['/members/', '/members/page/<int:page>/'], type='http', auth="public")
|
||||
def members(self, page=0, **post):
|
||||
website = request.registry['website']
|
||||
membership_obj = request.registry['membership.membership_line']
|
||||
|
||||
def dom_without(without):
|
||||
@@ -41,7 +40,7 @@ class website_crm_partner_assign(http.Controller):
|
||||
memberships.insert(0, {'membership_id_count': membership_obj.search(request.cr, request.uid, domain, count=True, context=request.context), 'membership_id': ("all", _("All Groups"))})
|
||||
|
||||
step = 20
|
||||
pager = website.pager(url="/members/", total=len(membership_ids), page=page, step=step, scope=7, url_args=post)
|
||||
pager = request.website.pager(url="/members/", total=len(membership_ids), page=page, step=step, scope=7, url_args=post)
|
||||
membership_ids = membership_obj.search(
|
||||
request.cr, openerp.SUPERUSER_ID, [('id', 'in', membership_ids)],
|
||||
limit=step, offset=pager['offset'], order="membership_id ASC,date DESC",
|
||||
@@ -55,13 +54,13 @@ class website_crm_partner_assign(http.Controller):
|
||||
'searches': post,
|
||||
'search_path': "?%s" % urllib.urlencode(post),
|
||||
}
|
||||
return request.webcontext.render("website_membership.index", values)
|
||||
return request.website.render("website_membership.index", values)
|
||||
|
||||
@website.route(['/members/<int:ref_id>/'], type='http', auth="public")
|
||||
def partners_ref(self, ref_id=0, **post):
|
||||
partner_obj = request.registry['res.partner']
|
||||
partner_ids = partner_obj.search(request.cr, openerp.SUPERUSER_ID, [('website_published', '=', True), ('id', '=', ref_id)], context=request.context)
|
||||
if not request.webcontext.is_public_user:
|
||||
if not request.context['is_public_user']:
|
||||
partner_ids += partner_obj.search(request.cr, request.uid, [('id', '=', ref_id)], context=request.context)
|
||||
|
||||
values = {
|
||||
@@ -69,4 +68,4 @@ class website_crm_partner_assign(http.Controller):
|
||||
request.cr, openerp.SUPERUSER_ID, partner_ids[0],
|
||||
context=dict(request.context, show_address=True)),
|
||||
}
|
||||
return request.webcontext.render("website_membership.details", values)
|
||||
return request.website.render("website_membership.details", values)
|
||||
|
||||
@@ -8,13 +8,14 @@ from openerp.addons.website import website
|
||||
|
||||
class Website(osv.osv):
|
||||
_inherit = "website"
|
||||
def get_webcontext(self, values={}, **kw):
|
||||
def preprocess_request(self, cr, uid, ids, *args, **kwargs):
|
||||
project_obj = request.registry['project.project']
|
||||
project_ids = project_obj.search(request.cr, request.uid, [('privacy_visibility', "=", "public")], context=request.context)
|
||||
values.update({
|
||||
'project_ids': project_obj.browse(request.cr, request.uid, project_ids, request.context),
|
||||
})
|
||||
return super(Website, self).get_webcontext(values, **kw)
|
||||
project_ids = project_obj.search(cr, uid, [('privacy_visibility', "=", "public")], context=request.context)
|
||||
|
||||
# FIXME: namespace global rendering vars
|
||||
request.context['project_ids'] = project_obj.browse(cr, uid, project_ids, request.context)
|
||||
|
||||
return super(Website, self).preprocess_request(cr, uid, ids, *args, **kwargs)
|
||||
|
||||
|
||||
class website_project(http.Controller):
|
||||
@@ -23,4 +24,4 @@ class website_project(http.Controller):
|
||||
def blog(self, project_id=None, **post):
|
||||
project_obj = request.registry['project.project']
|
||||
project = project_obj.browse(request.cr, request.uid, project_id, request.context)
|
||||
return request.webcontext.render("website_project.index", {'project_id': project})
|
||||
return request.website.render("website_project.index", {'project_id': project})
|
||||
|
||||
@@ -41,12 +41,12 @@ def get_current_order():
|
||||
|
||||
class Website(osv.osv):
|
||||
_inherit = "website"
|
||||
def get_webcontext(self, values={}, **kw):
|
||||
values.update({
|
||||
'order': get_current_order(),
|
||||
def preprocess_request(self, cr, uid, ids, *args, **kwargs):
|
||||
request.context.update({
|
||||
'order': get_current_order(), # FIXME: namespace global rendering vars
|
||||
# 'website_sale_get_current_order': get_current_order, # TODO: replace 'order' key in templates
|
||||
})
|
||||
return super(Website, self).get_webcontext(values, **kw)
|
||||
return super(Website, self).preprocess_request(cr, uid, ids, *args, **kwargs)
|
||||
|
||||
class Ecommerce(http.Controller):
|
||||
|
||||
@@ -61,8 +61,6 @@ class Ecommerce(http.Controller):
|
||||
|
||||
if 'promo' in post:
|
||||
self.change_pricelist(post.get('promo'))
|
||||
|
||||
website = request.registry['website']
|
||||
product_obj = request.registry.get('product.template')
|
||||
|
||||
domain = [("sale_ok", "=", True)]
|
||||
@@ -81,7 +79,7 @@ class Ecommerce(http.Controller):
|
||||
|
||||
step = 20
|
||||
product_count = len(product_obj.search(request.cr, request.uid, domain, context=request.context))
|
||||
pager = website.pager(url="/shop/category/%s/" % cat_id, total=product_count, page=page, step=step, scope=7, url_args=post)
|
||||
pager = request.website.pager(url="/shop/category/%s/" % cat_id, total=product_count, page=page, step=step, scope=7, url_args=post)
|
||||
|
||||
product_ids = product_obj.search(request.cr, request.uid, domain, limit=step, offset=pager['offset'], context=request.context)
|
||||
|
||||
@@ -94,7 +92,7 @@ class Ecommerce(http.Controller):
|
||||
'search': post.get("search"),
|
||||
'pager': pager,
|
||||
}
|
||||
return request.webcontext.render("website_sale.products", values)
|
||||
return request.website.render("website_sale.products", values)
|
||||
|
||||
@website.route(['/shop/product/<product_id>/'], type='http', auth="public")
|
||||
def product(self, cat_id=0, product_id=0, **post):
|
||||
@@ -120,12 +118,13 @@ class Ecommerce(http.Controller):
|
||||
'category_list': category_list,
|
||||
'product': product,
|
||||
}
|
||||
return request.webcontext.render("website_sale.product", values)
|
||||
return request.website.render("website_sale.product", values)
|
||||
|
||||
@website.route(['/shop/add_product/'], type='http', auth="public")
|
||||
def add_product(self, **post):
|
||||
product_id = request.registry.get('product.product').create(request.cr, request.uid, {'name': 'New Product'}, request.context)
|
||||
return werkzeug.utils.redirect("/shop/product/%s/" % product_id)
|
||||
@website.route(['/shop/add_product/', '/shop/category/<cat_id>/add_product/'], type='http', auth="public")
|
||||
def add_product(self, cat_id=0, **post):
|
||||
product_id = request.registry.get('product.product').create(request.cr, request.uid,
|
||||
{'name': 'New Product', 'public_categ_id': cat_id}, request.context)
|
||||
return werkzeug.utils.redirect("/shop/product/%s/?unable_editor=1" % product_id)
|
||||
|
||||
@website.route(['/shop/change_category/<product_id>/'], type='http', auth="public")
|
||||
def edit_product(self, product_id=0, **post):
|
||||
@@ -242,7 +241,7 @@ class Ecommerce(http.Controller):
|
||||
'categories': self.get_categories(),
|
||||
'suggested_products': prod_obj.browse(request.cr, request.uid, suggested_products, request.context),
|
||||
}
|
||||
return request.webcontext.render("website_sale.mycart", values)
|
||||
return request.website.render("website_sale.mycart", values)
|
||||
|
||||
@website.route(['/shop/<path:path>/add_cart/', '/shop/add_cart/'], type='http', auth="public")
|
||||
def add_cart(self, path=None, product_id=None, order_line_id=None, remove=None, json=None):
|
||||
@@ -286,7 +285,7 @@ class Ecommerce(http.Controller):
|
||||
}
|
||||
|
||||
checkout = {}
|
||||
if not request.webcontext.is_public_user:
|
||||
if not request.context['is_public_user']:
|
||||
partner = user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id
|
||||
partner_id = partner.id
|
||||
fields = ["name", "phone", "fax", "company", "email", "street", "city", "state_id", "zip", "country_id"]
|
||||
@@ -308,7 +307,7 @@ class Ecommerce(http.Controller):
|
||||
states_ids = country_state_obj.search(request.cr, SUPERUSER_ID, [(1, "=", 1)], context=request.context)
|
||||
values['states'] = country_state_obj.browse(request.cr, SUPERUSER_ID, states_ids, request.context)
|
||||
|
||||
return request.webcontext.render("website_sale.checkout", values)
|
||||
return request.website.render("website_sale.checkout", values)
|
||||
|
||||
@website.route(['/shop/confirm_order/'], type='http', auth="public")
|
||||
def confirm_order(self, **post):
|
||||
@@ -355,7 +354,7 @@ class Ecommerce(http.Controller):
|
||||
'country_id': post['country_id'],
|
||||
'state_id': post['state_id'],
|
||||
}
|
||||
if not request.webcontext.is_public_user:
|
||||
if not request.context['is_public_user']:
|
||||
partner_id = user_obj.browse(request.cr, request.uid, request.uid, request.context).partner_id.id
|
||||
partner_obj.write(request.cr, request.uid, [partner_id], partner_value, request.context)
|
||||
else:
|
||||
@@ -414,7 +413,7 @@ class Ecommerce(http.Controller):
|
||||
content = payment_obj.render(request.cr, SUPERUSER_ID, payment.id, order, order.name, order.pricelist_id.currency_id, order.amount_total)
|
||||
payment._content = content
|
||||
|
||||
return request.webcontext.render("website_sale.payment", values)
|
||||
return request.website.render("website_sale.payment", values)
|
||||
|
||||
@website.route(['/shop/payment_validate/'], type='http', auth="public")
|
||||
def payment_validate(self, **post):
|
||||
|
||||
@@ -22,13 +22,17 @@ $(document).ready(function () {
|
||||
$(".oe_website_sale .oe_mycart input.js_quantity").change(function () {
|
||||
var $input = $(this);
|
||||
var value = parseInt($input.val());
|
||||
if (!isNaN(value)) {
|
||||
$.get("./set_cart/", {'order_line_id': $(this).data('id'), 'set_number': value, 'json': true}, function (data) {
|
||||
var data = JSON.parse(data);
|
||||
set_my_cart_quantity(data[1]);
|
||||
$input.val(data[0]);
|
||||
});
|
||||
}
|
||||
if (isNaN(value)) value = 0;
|
||||
$.get("./set_cart/", {'order_line_id': $input.data('id'), 'set_number': value, 'json': true}, function (data) {
|
||||
var data = JSON.parse(data);
|
||||
set_my_cart_quantity(data[1]);
|
||||
$input.val(data[0]);
|
||||
if (!+data[0]) {
|
||||
$.get('/shop/remove_cart/', {'order_line_id': $input.data('id'), 'json': true,}, function (data) {
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$(".oe_website_sale #product_detail select[name='public_categ_id']").change(function () {
|
||||
@@ -43,6 +47,9 @@ $(document).ready(function () {
|
||||
$link = $(ev.currentTarget);
|
||||
$.get($link.attr("href"), {'json': true}, function (data) {
|
||||
var data = JSON.parse(data);
|
||||
if (!+data[0]) {
|
||||
location.reload();
|
||||
}
|
||||
set_my_cart_quantity(data[1]);
|
||||
$link.parent().find(".js_quantity").val(data[0]);
|
||||
});
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
<li>
|
||||
<a href="/shop/mycart/">
|
||||
<i class="icon-shopping-cart"></i>
|
||||
My cart <span class="my_cart_quantity" t-attf-class="badge #{(not order or not order.get_total_quantity()) and 'hidden' or ''}" t-esc="order and order.get_total_quantity() or ''"/>
|
||||
My cart <span t-attf-class="my_cart_quantity badge #{(not order or not order.get_total_quantity()) and 'hidden' or ''}" t-esc="order and order.get_total_quantity() or ''"/>
|
||||
</a>
|
||||
</li>
|
||||
</xpath>
|
||||
@@ -57,7 +57,7 @@
|
||||
<li>
|
||||
<a href="/shop/mycart/">
|
||||
<i class="icon-shopping-cart"></i>
|
||||
My cart <span class="my_cart_quantity" t-attf-class="badge #{(not order or not order.get_total_quantity()) and 'hidden' or ''}" t-esc="order and order.get_total_quantity() or ''"/>
|
||||
My cart <span t-attf-class="my_cart_quantity badge #{(not order or not order.get_total_quantity()) and 'hidden' or ''}" t-esc="order and order.get_total_quantity() or ''"/>
|
||||
</a>
|
||||
</li>
|
||||
</xpath>
|
||||
@@ -73,7 +73,6 @@
|
||||
</t>
|
||||
<t t-set="title">Shop - <t t-raw="title">Categories</t></t>
|
||||
<div class="container oe_website_sale">
|
||||
<a t-if="editable" href="/shop/add_product/" class="btn btn-default pull-right">Create New Product</a>
|
||||
<div class="row">
|
||||
<div class="col-md-12" id="shop_content">
|
||||
<t t-raw="shop_content" />
|
||||
@@ -121,6 +120,8 @@
|
||||
</t>
|
||||
<t t-set="title">Product</t>
|
||||
<t t-set="shop_content">
|
||||
<a t-if="editable" t-attf-href="/shop/#{ category_id and ('category/%s/' % category_id) or ''}add_product/" class="btn btn-default pull-right">Create New Product</a>
|
||||
<div t-if="editable" class="clearfix"/>
|
||||
<t t-call="website.pager">
|
||||
<t t-set="classname">pull-left</t>
|
||||
</t>
|
||||
@@ -182,18 +183,7 @@
|
||||
<button class="btn btn-sm btn-success">Add to basket</button>
|
||||
</form>
|
||||
<img class="media-object img-responsive" t-att-src="product.img('image_medium')"/>
|
||||
<div t-if="editable" t-att-class="'well css_non_editable_mode_hidden'">
|
||||
<h2>Category<br/><small>Select the public category</small></h2>
|
||||
<select name="public_categ_id" class="form-control" t-att-data-id="product.id">
|
||||
<option value="0">Choose a Category</option>
|
||||
<t t-foreach="category_list" t-as="cat">
|
||||
<option t-att-value="cat[0]" t-att-selected="cat[0] == product.public_categ_id.id and 'selected'"><t t-esc="cat[1]"/></option>
|
||||
</t>
|
||||
</select>
|
||||
<h2>Short Description for Quotations<br/><small>Displayed in your shop categories and for quotations</small></h2>
|
||||
<div class="form-control" t-field="product.description_sale">Enter a short description for this product</div>
|
||||
</div>
|
||||
<div t-field="product.website_description">Enter a short Website description for this product</div>
|
||||
<div t-field="product.website_description">Replace this text with your Website product description</div>
|
||||
<div>
|
||||
<t t-if="product.product_variant_ids[0].lst_price != product.product_variant_ids[0].price">
|
||||
<h5 class="text-error" style="text-decoration: line-through;" title="Price without reduction"><t t-field="product.product_variant_ids[0].lst_price" /> €</h5>
|
||||
@@ -397,7 +387,7 @@
|
||||
</div>
|
||||
<form class="col-md-8 form-horizontal" action="/shop/confirm_order/" method="post">
|
||||
<div class=" row">
|
||||
<a t-if="not partner" t-attf-href="/admin#action=redirect&url=#{ host_url }/shop/checkout/" class="btn btn-primary">Log me, I have an account</a>
|
||||
<a t-if="not partner" t-attf-href="/admin#action=redirect&url=#{ request.httprequest.host_url }/shop/checkout/" class="btn btn-primary">Log me, I have an account</a>
|
||||
<h3 class="col-md-10">Billing Information</h3>
|
||||
<div t-attf-class="form-group #{error.get('name') and 'has-error' or ''}">
|
||||
<label class="col-lg-3 control-label" for="contact_name">Name and firstname</label>
|
||||
|
||||
Reference in New Issue
Block a user