From a54cb247c4e55a5ec03e9f3dc6cd18fe73f1bea1 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 19 Mar 2013 11:12:22 +0530 Subject: [PATCH] webshop login, logout --- public/js/website_utils.js | 70 +++++++++++++ .../doctype/backup_manager/backup_dropbox.py | 1 + .../contact_control/contact_control.py | 98 +------------------ website/doctype/blog_post/blog_post.txt | 5 +- website/templates/css/login.css | 13 ++- website/templates/html/navbar.html | 3 - website/templates/html/outer.html | 4 + website/templates/js/login.js | 38 ++++++- website/templates/pages/login.html | 35 ++++--- 9 files changed, 147 insertions(+), 120 deletions(-) diff --git a/public/js/website_utils.js b/public/js/website_utils.js index 502b5eb982..7897cd548b 100644 --- a/public/js/website_utils.js +++ b/public/js/website_utils.js @@ -1,6 +1,7 @@ var erpnext = {}; +// Add / update a new Lead / Communication // subject, sender, description erpnext.send_message = function(opts) { if(opts.btn) { @@ -31,6 +32,27 @@ erpnext.send_message = function(opts) { }); } +// Setup the user tools +// +$(document).ready(function() { + // update login + var full_name = getCookie("full_name"); + if(full_name.substr(0,1)=='"') { + full_name = full_name.substr(1, full_name.length-2); + } + if(full_name) { + $("#user-tools").html(repl('%(full_name)s | \ + (%(count)s) | \ + ', { + full_name: full_name, + count: getCookie("cart_count") || "0" + })); + $("#user-tools a").tooltip({"placement":"bottom"}); + } +}) + +// Utility functions + function valid_email(id) { if(id.toLowerCase().search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1) return 0; else return 1; } @@ -55,3 +77,51 @@ function repl(s, dict) { } return s; } + +function getCookie(name) { + return getCookies()[name]; +} + +function getCookies() { + var c = document.cookie, v = 0, cookies = {}; + if (document.cookie.match(/^\s*\$Version=(?:"1"|1);\s*(.*)/)) { + c = RegExp.$1; + v = 1; + } + if (v === 0) { + c.split(/[,;]/).map(function(cookie) { + var parts = cookie.split(/=/, 2), + name = decodeURIComponent(parts[0].trimLeft()), + value = parts.length > 1 ? decodeURIComponent(parts[1].trimRight()) : null; + cookies[name] = value; + }); + } else { + c.match(/(?:^|\s+)([!#$%&'*+\-.0-9A-Z^`a-z|~]+)=([!#$%&'*+\-.0-9A-Z^`a-z|~]*|"(?:[\x20-\x7E\x80\xFF]|\\[\x00-\x7F])*")(?=\s*[,;]|$)/g).map(function($0, $1) { + var name = $0, + value = $1.charAt(0) === '"' + ? $1.substr(1, -1).replace(/\\(.)/g, "$1") + : $1; + cookies[name] = value; + }); + } + return cookies; +} + +if (typeof String.prototype.trimLeft !== "function") { + String.prototype.trimLeft = function() { + return this.replace(/^\s+/, ""); + }; +} +if (typeof String.prototype.trimRight !== "function") { + String.prototype.trimRight = function() { + return this.replace(/\s+$/, ""); + }; +} +if (typeof Array.prototype.map !== "function") { + Array.prototype.map = function(callback, thisArg) { + for (var i=0, n=this.length, a=[]; i 4194304: diff --git a/setup/doctype/contact_control/contact_control.py b/setup/doctype/contact_control/contact_control.py index 3c37ecfac4..54a2fccf22 100644 --- a/setup/doctype/contact_control/contact_control.py +++ b/setup/doctype/contact_control/contact_control.py @@ -1,99 +1,7 @@ -# Please edit this list and import only required elements from __future__ import unicode_literals import webnotes -from webnotes.utils import set_default -from webnotes.model import db_exists -from webnotes.model.doc import Document -from webnotes.model.bean import copy_doclist -from webnotes.model.code import get_obj -from webnotes import msgprint - -sql = webnotes.conn.sql - - - class DocType: - def __init__(self,doc,doclist=[]): - self.doc = doc - self.doclist = doclist - - def enable_login(self,arg): - arg = eval(arg) - sql("update tabContact set disable_login = 'No' where name=%s",arg['contact']) - sql("update tabProfile set enabled=1 where name=%s",arg['email']) - - def disable_login(self,arg): - arg = eval(arg) - sql("update tabContact set disable_login = 'Yes' where name=%s",arg['contact']) - sql("update tabProfile set enabled=0 where name=%s",arg['email']) - - def create_login(self,arg): - arg = eval(arg) - cont_det = sql("select * from tabContact where name=%s",(arg['contact']),as_dict=1) - if cont_det[0]['docstatus'] !=0: - msgprint('Please save the corresponding contact first') - raise Exception - - if sql("select name from tabProfile where name=%s",cont_det[0]['email_id']): - msgprint('Profile with same name already exist.') - raise Exception - else: - p = Document('Profile') - p.name = cont_det[0]['email_id'] - p.first_name = cont_det[0]['first_name'] - p.last_name = cont_det[0]['last_name'] - p.email = cont_det[0]['email_id'] - p.cell_no = cont_det[0]['contact_no'] - p.password = 'password' - p.enabled = 1 - p.user_type = 'Partner'; - p.save(1) - - get_obj(doc=p).on_update() - - role = [] - if cont_det[0]['contact_type'] == 'Individual': - role = ['Customer'] - else: - if cont_det[0]['is_customer']: - role.append('Customer') - if cont_det[0]['is_supplier']: - role.append('Supplier') - if cont_det[0]['is_sales_partner']: - role.append('Partner') - - if role: - prof_nm = p.name - for i in role: - r = Document('UserRole') - r.parent = p.name - r.role = i - r.parenttype = 'Profile' - r.parentfield = 'userroles' - r.save(1) - - if i == 'Customer': - def_keys = ['from_company','customer_name','customer'] - def_val = cont_det[0]['customer_name'] - self.set_default_val(def_keys,def_val,prof_nm) - - if i == 'Supplier': - def_keys = ['supplier_name','supplier'] - def_val = cont_det[0]['supplier_name'] - self.set_default_val(def_keys,def_val,prof_nm) - - sql("update tabContact set has_login = 'Yes' where name=%s",cont_det[0]['name']) - sql("update tabContact set disable_login = 'No' where name=%s",cont_det[0]['name']) - msgprint('User login is created.') - - #------set default values--------- - def set_default_val(self,def_keys,def_val,prof_nm): - for d in def_keys: - kv = Document('DefaultValue') - kv.defkey = d - kv.defvalue = def_val - kv.parent = prof_nm - kv.parenttype = 'Profile' - kv.parentfield = 'defaults' - kv.save(1) \ No newline at end of file + def __init__(self,doc,doclist=[]): + self.doc = doc + self.doclist = doclist diff --git a/website/doctype/blog_post/blog_post.txt b/website/doctype/blog_post/blog_post.txt index 480bca4924..4144e40134 100644 --- a/website/doctype/blog_post/blog_post.txt +++ b/website/doctype/blog_post/blog_post.txt @@ -2,7 +2,7 @@ { "creation": "2013-03-08 11:36:50", "docstatus": 0, - "modified": "2013-03-11 15:23:21", + "modified": "2013-03-18 13:55:53", "modified_by": "Administrator", "owner": "Administrator" }, @@ -65,6 +65,7 @@ "doctype": "DocField", "fieldname": "blogger", "fieldtype": "Link", + "in_list_view": 1, "label": "Blogger", "options": "Blogger", "reqd": 1 @@ -73,6 +74,7 @@ "doctype": "DocField", "fieldname": "blog_category", "fieldtype": "Link", + "in_list_view": 1, "label": "Blog Category", "options": "Blog Category" }, @@ -86,6 +88,7 @@ "doctype": "DocField", "fieldname": "blog_intro", "fieldtype": "Small Text", + "in_list_view": 1, "label": "Blog Intro", "reqd": 1 }, diff --git a/website/templates/css/login.css b/website/templates/css/login.css index c2a7af2521..4120807022 100644 --- a/website/templates/css/login.css +++ b/website/templates/css/login.css @@ -4,9 +4,17 @@ margin: 70px auto; } + #login_wrapper, + #login_wrapper h3 { + color: #333; + } + + #login_wrapper a { + color: #0088cc; + } + .layout-wrapper { background-color: #fff; - color: #333; padding: 10px; box-shadow: 1px 1px 3px 3px #ccc; font-size: 12px; @@ -32,7 +40,4 @@ text-align: center; padding: 15px; } - .login-footer, .login-footer a { - color: #999; - } \ No newline at end of file diff --git a/website/templates/html/navbar.html b/website/templates/html/navbar.html index 8112499c04..4663a2f964 100644 --- a/website/templates/html/navbar.html +++ b/website/templates/html/navbar.html @@ -47,9 +47,6 @@ {% endif %} {% endfor %} - diff --git a/website/templates/html/outer.html b/website/templates/html/outer.html index f7296e4f95..207c124e44 100644 --- a/website/templates/html/outer.html +++ b/website/templates/html/outer.html @@ -4,6 +4,10 @@
+
+ Login +
+
{% if banner_html %}
{{ banner_html }}
{% endif %} diff --git a/website/templates/js/login.js b/website/templates/js/login.js index 96b820aa31..09e8e9e611 100644 --- a/website/templates/js/login.js +++ b/website/templates/js/login.js @@ -19,25 +19,43 @@ $(document).ready(function(wrapper) { login.do_login = function(){ var args = {}; - args['usr']=$("#login_id").val(); - args['pwd']=$("#password").val(); + if(window.is_sign_up) { + args.cmd = "core.doctype.profile.profile.sign_up"; + args.email = $("#login_id").val(); + args.full_name = $("#full_name").val(); - if(!args.usr || !args.pwd) { - login.set_message("Both login and password required."); + if(!args.email || !valid_email(args.email) || !args.full_name) { + login.set_message("Valid email and name required."); + return false; + } + + } else { + args.cmd = "login" + args.usr = $("#login_id").val(); + args.pwd = $("#password").val(); + + if(!args.usr || !args.pwd) { + login.set_message("Both login and password required."); + return false; + } } $('#login_btn').attr("disabled", "disabled"); + $("#login-spinner").toggle(true); $('#login_message').toggle(false); $.ajax({ type: "POST", url: "server.py", - data: {cmd:"login", usr:args.usr, pwd: args.pwd}, + data: args, dataType: "json", success: function(data) { + $("#login-spinner").toggle(false); $('#login_btn').attr("disabled", false); if(data.message=="Logged In") { window.location.href = "app.html"; + } else if(data.message=="No App") { + window.location.href = "index"; } else { login.set_message(data.message); } @@ -47,6 +65,16 @@ login.do_login = function(){ return false; } +login.sign_up = function() { + $("#login_wrapper h3").html("Sign Up"); + $("#login-label").html("Email Id"); + $("#password-label").html("Full Name"); + $("#password-row, #forgot-wrapper, #sign-up-wrapper, #login_message").toggle(false); + $("#full-name-row").toggle(true); + $("#login_btn").html("Register"); + window.is_sign_up = true; +} + login.show_forgot_password = function(){ // create dialog var login_id = $("#login_id").val(); diff --git a/website/templates/pages/login.html b/website/templates/pages/login.html index ef9b7bbce4..6b847ff14e 100644 --- a/website/templates/pages/login.html +++ b/website/templates/pages/login.html @@ -10,7 +10,7 @@ {% set title="Login" %} {% block body %} -
+

Login

@@ -18,34 +18,45 @@ - + - - + + + + + +
-

+ Forgot Password

+

+ New user? Sign Up

- +