Merge pull request #1542 from rmehta/hook-for-home-page

Add hook for returning home page for website user
This commit is contained in:
Anand Doshi 2016-01-25 17:51:41 +05:30
commit fa156f4c86
6 changed files with 86 additions and 66 deletions

View file

@ -130,10 +130,12 @@ class LoginManager:
frappe.local.cookie_manager.set_cookie("system_user", "no")
if not resume:
frappe.local.response["message"] = "No App"
frappe.local.response["home_page"] = get_website_user_home_page(self.user)
else:
frappe.local.cookie_manager.set_cookie("system_user", "yes")
if not resume:
frappe.local.response['message'] = 'Logged In'
frappe.local.response["home_page"] = "/desk"
if not resume:
frappe.response["full_name"] = self.full_name
@ -293,3 +295,11 @@ def clear_cookies():
if hasattr(frappe.local, "session"):
frappe.session.sid = ""
frappe.local.cookie_manager.delete_cookie(["full_name", "user_id", "sid", "user_image", "system_user"])
def get_website_user_home_page(user):
home_page_method = frappe.get_hooks('get_website_user_home_page')
if home_page_method:
home_page = frappe.get_attr(home_page_method[-1])(user)
return '/' + home_page.strip('/')
else:
return '/me'

View file

@ -12,63 +12,6 @@ import frappe.desk.form.run_method
from frappe.utils.response import build_response
import bleach
@frappe.whitelist(allow_guest=True)
def version():
return frappe.__version__
@frappe.whitelist()
def ping():
return "pong"
@frappe.async.handler
def async_ping():
return "pong"
@frappe.whitelist()
def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None):
frappe.desk.form.run_method.runserverobj(method, docs=docs, dt=dt, dn=dn, arg=arg, args=args)
@frappe.whitelist(allow_guest=True)
def logout():
frappe.local.login_manager.logout()
frappe.db.commit()
@frappe.whitelist(allow_guest=True)
def web_logout():
frappe.local.login_manager.logout()
frappe.db.commit()
frappe.respond_as_web_page("Logged Out", """<p><a href="/index" class="text-muted">Back to Home</a></p>""")
@frappe.whitelist(allow_guest=True)
def run_custom_method(doctype, name, custom_method):
"""cmd=run_custom_method&doctype={doctype}&name={name}&custom_method={custom_method}"""
doc = frappe.get_doc(doctype, name)
if getattr(doc, custom_method, frappe._dict()).is_whitelisted:
frappe.call(getattr(doc, custom_method), **frappe.local.form_dict)
else:
frappe.throw(_("Not permitted"), frappe.PermissionError)
@frappe.whitelist()
def uploadfile():
try:
if frappe.form_dict.get('from_form'):
try:
ret = frappe.utils.file_manager.upload()
except frappe.DuplicateEntryError:
# ignore pass
ret = None
frappe.db.rollback()
else:
if frappe.form_dict.get('method'):
method = frappe.get_attr(frappe.form_dict.method)
is_whitelisted(method)
ret = method()
except Exception:
frappe.errprint(frappe.utils.get_traceback())
ret = None
return ret
def handle():
"""handle request"""
cmd = frappe.local.form_dict.cmd
@ -117,6 +60,55 @@ def is_whitelisted(method):
frappe.msgprint(_("Not permitted"))
raise frappe.PermissionError('Not Allowed, {0}'.format(method))
@frappe.whitelist(allow_guest=True)
def version():
return frappe.__version__
@frappe.whitelist()
def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None):
frappe.desk.form.run_method.runserverobj(method, docs=docs, dt=dt, dn=dn, arg=arg, args=args)
@frappe.whitelist(allow_guest=True)
def logout():
frappe.local.login_manager.logout()
frappe.db.commit()
@frappe.whitelist(allow_guest=True)
def web_logout():
frappe.local.login_manager.logout()
frappe.db.commit()
frappe.respond_as_web_page("Logged Out", """<p><a href="/index" class="text-muted">Back to Home</a></p>""")
@frappe.whitelist(allow_guest=True)
def run_custom_method(doctype, name, custom_method):
"""cmd=run_custom_method&doctype={doctype}&name={name}&custom_method={custom_method}"""
doc = frappe.get_doc(doctype, name)
if getattr(doc, custom_method, frappe._dict()).is_whitelisted:
frappe.call(getattr(doc, custom_method), **frappe.local.form_dict)
else:
frappe.throw(_("Not permitted"), frappe.PermissionError)
@frappe.whitelist()
def uploadfile():
try:
if frappe.form_dict.get('from_form'):
try:
ret = frappe.utils.file_manager.upload()
except frappe.DuplicateEntryError:
# ignore pass
ret = None
frappe.db.rollback()
else:
if frappe.form_dict.get('method'):
method = frappe.get_attr(frappe.form_dict.method)
is_whitelisted(method)
ret = method()
except Exception:
frappe.errprint(frappe.utils.get_traceback())
ret = None
return ret
def get_attr(cmd):
"""get method object from cmd"""
if '.' in cmd:
@ -137,3 +129,11 @@ def get_async_task_status(task_id):
"state": a.state,
"progress": 0
}
@frappe.whitelist()
def ping():
return "pong"
@frappe.async.handler
def async_ping():
return "pong"

View file

@ -104,7 +104,7 @@ login.login_handlers = (function() {
var login_handlers = {
200: function(data) {
if(data.message=="Logged In") {
window.location.href = get_url_arg("redirect-to") || "/desk";
window.location.href = get_url_arg("redirect-to") || data.home_page;
} else if(data.message=="No App") {
if(localStorage) {
var last_visited =
@ -116,7 +116,7 @@ login.login_handlers = (function() {
if(last_visited && last_visited != "/login") {
window.location.href = last_visited;
} else {
window.location.href = "/me";
window.location.href = data.home_page;
}
} else if(["#signup", "#forgot"].indexOf(window.location.hash)!==-1) {
frappe.msgprint(data.message);

View file

@ -71,7 +71,7 @@ def validate_email_add(email_str, throw=False):
# example: "test@example.com test2@example.com" will return "test@example.comtest2" after parseaddr!!!
return False
email = extract_email_id(email_str)
email = extract_email_id(email_str.strip())
match = re.match("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", email.lower())
if not match:

View file

@ -145,6 +145,9 @@ app_license = "{app_license}"
# "Role": "home_page"
# }}
# Website user home page (by function)
# get_website_user_home_page = "{app_name}.utils.get_home_page"
# Generators
# ----------

View file

@ -36,14 +36,19 @@ def get_home_page():
return frappe.local.flags.home_page
def _get_home_page():
role_home_page = frappe.get_hooks("role_home_page")
home_page = None
if role_home_page:
for role in frappe.get_roles():
if role in role_home_page:
home_page = role_home_page[role][-1]
break
get_website_user_home_page = frappe.get_hooks('get_website_user_home_page')
if get_website_user_home_page:
home_page = frappe.get_attr(get_website_user_home_page[-1])(frappe.session.user)
if not home_page:
role_home_page = frappe.get_hooks("role_home_page")
if role_home_page:
for role in frappe.get_roles():
if role in role_home_page:
home_page = role_home_page[role][-1]
break
if not home_page:
home_page = frappe.get_hooks("home_page")
@ -53,6 +58,8 @@ def get_home_page():
if not home_page:
home_page = frappe.db.get_value("Website Settings", None, "home_page") or "login"
home_page = home_page.strip('/')
return home_page
return frappe.cache().hget("home_page", frappe.session.user, _get_home_page)