summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Simonis <chs@openerp.com>2012-06-25 14:26:30 +0200
committerChristophe Simonis <chs@openerp.com>2012-06-25 14:26:30 +0200
commitff4342dc4f08adf10343ae700d8c9ebf89fdd2a2 (patch)
treec426acecf4910e7f8f7c86fb248469dc1d795ded
parent0a22debf5fb7af0dbf4ebf5039aa6ecbfb054a95 (diff)
[ADD] signup addon
bzr revid: chs@openerp.com-20120625122630-ce6hywabt512xbh6
-rw-r--r--addons/anonymous/static/src/xml/anonymous.xml2
-rw-r--r--addons/signup/__init__.py2
-rw-r--r--addons/signup/__openerp__.py23
-rw-r--r--addons/signup/res_config.py19
-rw-r--r--addons/signup/res_config.xml16
-rw-r--r--addons/signup/signup_wizard.py65
-rw-r--r--addons/signup/signup_wizard.xml41
-rw-r--r--addons/signup/static/src/js/signup.js21
-rw-r--r--addons/signup/static/src/xml/signup.xml14
9 files changed, 203 insertions, 0 deletions
diff --git a/addons/anonymous/static/src/xml/anonymous.xml b/addons/anonymous/static/src/xml/anonymous.xml
index 4c6d2fcbf54..7429efff458 100644
--- a/addons/anonymous/static/src/xml/anonymous.xml
+++ b/addons/anonymous/static/src/xml/anonymous.xml
@@ -4,10 +4,12 @@
<templates id="template" xml:space="preserve">
<t t-name="UserMenu.anonymous">
+ <div>
<a href="#" class="oe_user_menu oe_topbar_item oe_topbar_anonymous_login">
<img class="oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/icons/gtk-dialog-authentication.png'"/>
Login
</a>
+ </div>
</t>
</templates>
diff --git a/addons/signup/__init__.py b/addons/signup/__init__.py
new file mode 100644
index 00000000000..f15ba34bf0a
--- /dev/null
+++ b/addons/signup/__init__.py
@@ -0,0 +1,2 @@
+import signup_wizard
+import res_config
diff --git a/addons/signup/__openerp__.py b/addons/signup/__openerp__.py
new file mode 100644
index 00000000000..b927b9526b7
--- /dev/null
+++ b/addons/signup/__openerp__.py
@@ -0,0 +1,23 @@
+{
+ 'name': 'Signup',
+ 'description': 'Allow users to register',
+ 'author': 'OpenERP SA',
+ 'version': '1.0',
+ 'category': 'Tools',
+ 'website': 'http://www.openerp.com',
+ 'installable': True,
+ 'depends': ['anonymous', 'base_setup'],
+ 'data': [
+ 'signup_wizard.xml',
+ 'res_config.xml',
+ ],
+ 'js': [
+ 'static/src/js/signup.js',
+ ],
+ #'css': [
+ # 'static/src/css/reset_password.css',
+ #],
+ 'qweb': [
+ 'static/src/xml/signup.xml',
+ ],
+}
diff --git a/addons/signup/res_config.py b/addons/signup/res_config.py
new file mode 100644
index 00000000000..0c8ab8023d8
--- /dev/null
+++ b/addons/signup/res_config.py
@@ -0,0 +1,19 @@
+from openerp.osv import osv, fields
+
+class ResConfig(osv.TransientModel):
+ _inherit = 'base.config.settings'
+
+ _columns = {
+ 'signup_user_template_id': fields.many2one('res.users', 'Template user for account creation')
+ }
+
+ def get_default_user_tpl(self, cr, uid, fields, context=None):
+ icp = self.pool.get('ir.config_parameter')
+ return {
+ 'signup_user_template_id': icp.get_param(cr, uid, 'signup.user_template_id', 0) or False
+ }
+
+ def set_user_template(self, cr, uid, ids, context=None):
+ config = self.browse(cr, uid, ids[0], context=context)
+ icp = self.pool.get('ir.config_parameter')
+ icp.set_param(cr, uid, 'signup.user_template_id', config.signup_user_template_id.id)
diff --git a/addons/signup/res_config.xml b/addons/signup/res_config.xml
new file mode 100644
index 00000000000..d2c85a33fd5
--- /dev/null
+++ b/addons/signup/res_config.xml
@@ -0,0 +1,16 @@
+<openerp>
+ <data>
+ <record id="view_gen_conf_inherit" model="ir.ui.view">
+ <field name="name">Inherit General Settings</field>
+ <field name="model">base.config.settings</field>
+ <field name="inherit_id" ref="base_setup.view_general_configuration"/>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <field name="module_portal" position="after">
+ <field name="signup_user_template_id"/>
+ </field>
+ </field>
+ </record>
+ </data>
+</openerp>
+
diff --git a/addons/signup/signup_wizard.py b/addons/signup/signup_wizard.py
new file mode 100644
index 00000000000..939e90aa21d
--- /dev/null
+++ b/addons/signup/signup_wizard.py
@@ -0,0 +1,65 @@
+from functools import partial
+from openerp.osv import osv, fields
+
+class res_users(osv.Model):
+ _inherit = 'res.users'
+
+ _sql_constraints = [
+ ('email_uniq', 'UNIQUE (user_email)', 'You can not have two users with the same email!')
+ ]
+
+
+class signup_wizard(osv.TransientModel):
+ _name = 'signup.wizard'
+ _columns = {
+ 'name': fields.char('Name', size=64),
+ 'email': fields.char('Email', size=64),
+ 'pw': fields.char('Password', size=64),
+ 'cpw': fields.char('Confirm Password', size=64),
+ 'state': fields.selection([(x, x) for x in 'draft done missmatch'.split()], required=True),
+ }
+ _defaults = {
+ 'state': 'draft',
+ }
+
+ def create(self, cr, uid, values, context=None):
+ # NOTE here, invalid values raises exceptions to avoid storing
+ # sensitive data into the database (which then are available to anyone)
+
+ name = values.get('name')
+ email = values.get('email')
+ pw = values.get('pw')
+ cpw = values.get('cpw')
+
+ if pw != cpw:
+ raise osv.except_osv('Error', 'Passwords missmatch')
+
+ Users = self.pool.get('res.users')
+
+ user_template_id = self.pool.get('ir.config_parameter').get_param(cr, uid, 'signup.user_template_id', 0)
+ if user_template_id:
+ func = partial(Users.copy, cr, 1, user_template_id, context=context)
+ else:
+ func = partial(Users.create, cr, 1, context=context)
+
+ func({
+ 'name': name,
+ 'login': email,
+ 'user_email': email,
+ 'password': pw,
+ 'active': True,
+ })
+
+ values = {'state': 'done'}
+ return super(signup_wizard, self).create(cr, uid, values, context)
+
+ def signup(self, cr, uid, ids, context=None):
+ return {
+ 'type': 'ir.actions.client',
+ 'tag': 'login',
+ }
+
+ def onchange_pw(self, cr, uid, ids, pw, cpw, context=None):
+ if pw != cpw:
+ return {'value': {'state': 'missmatch'}}
+ return {'value': {'state': 'draft'}}
diff --git a/addons/signup/signup_wizard.xml b/addons/signup/signup_wizard.xml
new file mode 100644
index 00000000000..ec5095ff474
--- /dev/null
+++ b/addons/signup/signup_wizard.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<openerp>
+ <data>
+ <record id="signup_wizard_form_view" model="ir.ui.view">
+ <field name="name">signup.wizard.form</field>
+ <field name="model">signup.wizard</field>
+ <field name="type">form</field>
+ <field name="arch" type="xml">
+ <form string="Signup" version="7.0">
+ <field name="state" invisible="1"/>
+ <group colspan="4" states="draft,missmatch">
+ <field name="name" required="1"/>
+ <field name="email" required="1"/>
+ <field name="pw" required='1' on_change="onchange_pw(pw,cpw)"/>
+ <field name="cpw" required='1' on_change="onchange_pw(pw,cpw)"/>
+ <group colspan="4" states="missmatch">
+ <div>Passwords missmatch</div>
+ </group>
+ <group colspan="2" col="1">
+ <button string="Sign Up" name="signup" icon="gtk-connect" attrs="{'readonly': [('state', '=', 'missmatch')]}" type="object"/>
+ </group>
+ </group>
+ <group colspan="4" states="done" col="1">
+ <div>You can now login.</div>
+ <button special="cancel" string="Close"/>
+ </group>
+ </form>
+ </field>
+ </record>
+
+ <record id="action_reset" model="ir.actions.act_window">
+ <field name="name">Reset Password</field>
+ <field name="type">ir.actions.act_window</field>
+ <field name="res_model">signup.wizard</field>
+ <field name="view_type">form</field>
+ <field name="view_mode">form</field>
+ <field name="target">new</field>
+ </record>
+
+ </data>
+</openerp>
diff --git a/addons/signup/static/src/js/signup.js b/addons/signup/static/src/js/signup.js
new file mode 100644
index 00000000000..0de6e83424a
--- /dev/null
+++ b/addons/signup/static/src/js/signup.js
@@ -0,0 +1,21 @@
+openerp.signup = function(instance) {
+
+ instance.web.UserMenu.include({
+ start: function() {
+ var self = this;
+ this._super.apply(this, arguments);
+ this.$element.find('a.oe_topbar_signup').click(function() {
+ var p = self.getParent();
+ var am = p.action_manager;
+ am.do_action({
+ type:'ir.actions.act_window',
+ res_model: 'signup.wizard',
+ views: [[false, 'form']],
+ target: 'new',
+ name: 'Sign Up'
+ });
+ });
+ }
+ });
+
+};
diff --git a/addons/signup/static/src/xml/signup.xml b/addons/signup/static/src/xml/signup.xml
new file mode 100644
index 00000000000..c6c7f555ecd
--- /dev/null
+++ b/addons/signup/static/src/xml/signup.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- vim:fdl=1:
+-->
+<templates id="template" xml:space="preserve">
+
+<t t-extend="UserMenu.anonymous">
+ <t t-jquery="a" t-operation="after">
+ <a href="#" class="oe_user_menu oe_topbar_item oe_topbar_signup">
+ <img class="oe_topbar_avatar" t-att-src="_s + '/web/static/src/img/user_menu_avatar.png'"/>
+ Sign Up
+ </a>
+ </t>
+</t>
+</templates>