@@ -8,3 +8,4 @@ locale | |||||
*.egg-info | *.egg-info | ||||
dist/ | dist/ | ||||
build/ | build/ | ||||
docs/ |
@@ -73,6 +73,9 @@ class HTTPRequest: | |||||
class LoginManager: | class LoginManager: | ||||
def __init__(self): | def __init__(self): | ||||
self.user = None | self.user = None | ||||
self.info = None | |||||
self.full_name = None | |||||
if frappe.local.form_dict.get('cmd')=='login' or frappe.local.request.path=="/api/method/login": | if frappe.local.form_dict.get('cmd')=='login' or frappe.local.request.path=="/api/method/login": | ||||
self.login() | self.login() | ||||
else: | else: | ||||
@@ -85,6 +88,10 @@ class LoginManager: | |||||
self.post_login() | self.post_login() | ||||
def post_login(self): | def post_login(self): | ||||
self.info = frappe.db.get_value("User", self.user, | |||||
["user_type", "first_name", "last_name", "user_image"], as_dict=1) | |||||
self.full_name = " ".join(filter(None, [self.info.first_name, self.info.last_name])) | |||||
self.run_trigger('on_login') | self.run_trigger('on_login') | ||||
self.validate_ip_address() | self.validate_ip_address() | ||||
self.validate_hour() | self.validate_hour() | ||||
@@ -95,24 +102,21 @@ class LoginManager: | |||||
# set sid again | # set sid again | ||||
frappe.local.cookie_manager.init_cookies() | frappe.local.cookie_manager.init_cookies() | ||||
info = frappe.db.get_value("User", self.user, | |||||
["user_type", "first_name", "last_name", "user_image"], as_dict=1) | |||||
if info.user_type=="Website User": | |||||
if self.info.user_type=="Website User": | |||||
frappe.local.cookie_manager.set_cookie("system_user", "no") | frappe.local.cookie_manager.set_cookie("system_user", "no") | ||||
frappe.local.response["message"] = "No App" | frappe.local.response["message"] = "No App" | ||||
else: | else: | ||||
frappe.local.cookie_manager.set_cookie("system_user", "yes") | frappe.local.cookie_manager.set_cookie("system_user", "yes") | ||||
frappe.local.response['message'] = 'Logged In' | frappe.local.response['message'] = 'Logged In' | ||||
full_name = " ".join(filter(None, [info.first_name, info.last_name])) | |||||
frappe.response["full_name"] = full_name | |||||
frappe.local.cookie_manager.set_cookie("full_name", full_name) | |||||
frappe.response["full_name"] = self.full_name | |||||
frappe.local.cookie_manager.set_cookie("full_name", self.full_name) | |||||
frappe.local.cookie_manager.set_cookie("user_id", self.user) | frappe.local.cookie_manager.set_cookie("user_id", self.user) | ||||
frappe.local.cookie_manager.set_cookie("user_image", info.user_image or "") | |||||
frappe.local.cookie_manager.set_cookie("user_image", self.info.user_image or "") | |||||
def make_session(self, resume=False): | def make_session(self, resume=False): | ||||
# start session | # start session | ||||
frappe.local.session_obj = Session(user=self.user, resume=resume) | |||||
frappe.local.session_obj = Session(user=self.user, resume=resume, full_name=self.full_name) | |||||
# reset user if changed to Guest | # reset user if changed to Guest | ||||
self.user = frappe.local.session_obj.user | self.user = frappe.local.session_obj.user | ||||
@@ -8,58 +8,54 @@ from frappe.utils import now_datetime, cint | |||||
def set_new_name(doc): | def set_new_name(doc): | ||||
if doc.name: | if doc.name: | ||||
return | |||||
pass | |||||
# amendments | |||||
if getattr(doc, "amended_from", None): | |||||
return _get_amended_name(doc) | |||||
elif getattr(doc, "amended_from", None): | |||||
_set_amended_name(doc) | |||||
elif hasattr(doc, "run_method"): | |||||
elif hasattr(doc, "autoname"): | |||||
doc.run_method("autoname") | doc.run_method("autoname") | ||||
if doc.name: | |||||
return | |||||
autoname = frappe.get_meta(doc.doctype).autoname | |||||
if not doc.name: | |||||
autoname = frappe.get_meta(doc.doctype).autoname | |||||
# based on a field | |||||
if autoname: | |||||
if autoname.startswith('field:'): | |||||
n = doc.get(autoname[6:]) | |||||
if not n: | |||||
raise Exception, 'Name is required' | |||||
doc.name = n.strip() | |||||
# based on a field | |||||
if autoname: | |||||
if autoname.startswith('field:'): | |||||
n = doc.get(autoname[6:]) | |||||
if not n: | |||||
raise Exception, 'Name is required' | |||||
doc.name = n.strip() | |||||
elif autoname.startswith("naming_series:"): | |||||
if not doc.naming_series: | |||||
doc.naming_series = get_default_naming_series(doc.doctype) | |||||
elif autoname.startswith("naming_series:"): | |||||
if not doc.naming_series: | |||||
doc.naming_series = get_default_naming_series(doc.doctype) | |||||
if not doc.naming_series: | |||||
frappe.msgprint(frappe._("Naming Series mandatory"), raise_exception=True) | |||||
doc.name = make_autoname(doc.naming_series+'.#####') | |||||
if not doc.naming_series: | |||||
frappe.msgprint(frappe._("Naming Series mandatory"), raise_exception=True) | |||||
doc.name = make_autoname(doc.naming_series+'.#####') | |||||
# call the method! | |||||
elif autoname=='Prompt': | |||||
# set from __newname in save.py | |||||
if not doc.name: | |||||
frappe.throw(frappe._("Name not set via Prompt")) | |||||
# call the method! | |||||
elif autoname=='Prompt': | |||||
# set from __newname in save.py | |||||
if not doc.name: | |||||
frappe.throw(frappe._("Name not set via Prompt")) | |||||
else: | |||||
doc.name = make_autoname(autoname, doc.doctype) | |||||
else: | |||||
doc.name = make_autoname(autoname, doc.doctype) | |||||
# default name for table | |||||
elif doc.meta.istable: | |||||
doc.name = make_autoname('hash', doc.doctype) | |||||
# default name for table | |||||
elif doc.meta.istable: | |||||
doc.name = make_autoname('hash', doc.doctype) | |||||
elif doc.meta.issingle: | |||||
doc.name = doc.doctype | |||||
# unable to determine a name, use global series | |||||
if not doc.name: | |||||
doc.name = make_autoname('hash', doc.doctype) | |||||
elif doc.meta.issingle: | |||||
doc.name = doc.doctype | |||||
doc.name = doc.name.strip() | |||||
# unable to determine a name, use global series | |||||
if not doc.name: | |||||
doc.name = make_autoname('hash', doc.doctype) | |||||
validate_name(doc.doctype, doc.name) | |||||
doc.name = validate_name(doc.doctype, doc.name) | |||||
def make_autoname(key, doctype=''): | def make_autoname(key, doctype=''): | ||||
""" | """ | ||||
@@ -159,7 +155,7 @@ def validate_name(doctype, name, case=None, merge=False): | |||||
return name | return name | ||||
def _get_amended_name(doc): | |||||
def _set_amended_name(doc): | |||||
am_id = 1 | am_id = 1 | ||||
am_prefix = doc.amended_from | am_prefix = doc.amended_from | ||||
if frappe.db.get_value(doc.doctype, doc.amended_from, "amended_from"): | if frappe.db.get_value(doc.doctype, doc.amended_from, "amended_from"): | ||||
@@ -118,9 +118,10 @@ def get(): | |||||
return bootinfo | return bootinfo | ||||
class Session: | class Session: | ||||
def __init__(self, user, resume=False): | |||||
def __init__(self, user, resume=False, full_name=None): | |||||
self.sid = cstr(frappe.form_dict.get('sid') or unquote(frappe.request.cookies.get('sid', 'Guest'))) | self.sid = cstr(frappe.form_dict.get('sid') or unquote(frappe.request.cookies.get('sid', 'Guest'))) | ||||
self.user = user | self.user = user | ||||
self.full_name = full_name | |||||
self.data = frappe._dict({'data': frappe._dict({})}) | self.data = frappe._dict({'data': frappe._dict({})}) | ||||
self.time_diff = None | self.time_diff = None | ||||
if resume: | if resume: | ||||
@@ -146,6 +147,7 @@ class Session: | |||||
if self.user != "Guest": | if self.user != "Guest": | ||||
self.data['data']['last_updated'] = frappe.utils.now() | self.data['data']['last_updated'] = frappe.utils.now() | ||||
self.data['data']['session_expiry'] = get_expiry_period() | self.data['data']['session_expiry'] = get_expiry_period() | ||||
self.data['data']['full_name'] = self.full_name | |||||
self.data['data']['session_country'] = get_geo_ip_country(frappe.get_request_header('REMOTE_ADDR')) | self.data['data']['session_country'] = get_geo_ip_country(frappe.get_request_header('REMOTE_ADDR')) | ||||
# insert session | # insert session | ||||
@@ -62,7 +62,8 @@ def get_allowed_functions_for_jenv(): | |||||
"utils": datautils, | "utils": datautils, | ||||
"user": frappe.local.session.user, | "user": frappe.local.session.user, | ||||
"date_format": frappe.db.get_default("date_format") or "yyyy-mm-dd", | "date_format": frappe.db.get_default("date_format") or "yyyy-mm-dd", | ||||
"get_gravatar": frappe.utils.get_gravatar | |||||
"get_gravatar": frappe.utils.get_gravatar, | |||||
"full_name": frappe.local.session.data.full_name | |||||
}, | }, | ||||
"get_visible_columns": \ | "get_visible_columns": \ | ||||
frappe.get_attr("frappe.templates.pages.print.get_visible_columns"), | frappe.get_attr("frappe.templates.pages.print.get_visible_columns"), | ||||
@@ -73,7 +73,7 @@ def build_context(sitemap_options): | |||||
if ret: | if ret: | ||||
context.update(ret) | context.update(ret) | ||||
if hasattr(module, "get_children"): | if hasattr(module, "get_children"): | ||||
context.get_children = module.get_children | |||||
context.children = module.get_children(context) | |||||
add_metatags(context) | add_metatags(context) | ||||
@@ -2,7 +2,7 @@ | |||||
# MIT License. See license.txt | # MIT License. See license.txt | ||||
from __future__ import unicode_literals | from __future__ import unicode_literals | ||||
import frappe, re, os | |||||
import frappe, re, os, json | |||||
import requests, requests.exceptions | import requests, requests.exceptions | ||||
from frappe.website.website_generator import WebsiteGenerator | from frappe.website.website_generator import WebsiteGenerator | ||||
from frappe.website.router import resolve_route | from frappe.website.router import resolve_route | ||||
@@ -53,7 +53,8 @@ class WebPage(WebsiteGenerator): | |||||
context.header = self.title | context.header = self.title | ||||
# for sidebar | # for sidebar | ||||
context.children = self.get_children() | |||||
if not context.children: | |||||
context.children = self.get_children() | |||||
return context | return context | ||||
@@ -69,10 +70,12 @@ class WebPage(WebsiteGenerator): | |||||
pass | pass | ||||
def get_dynamic_context(self, context): | def get_dynamic_context(self, context): | ||||
"update context from `.py` and load sidebar from `_sidebar.json` if either exists" | |||||
template_path_base = self.template_path.rsplit(".", 1)[0] | template_path_base = self.template_path.rsplit(".", 1)[0] | ||||
template_module = os.path.dirname(os.path.relpath(self.template_path, | |||||
os.path.join(frappe.get_app_path("frappe"),"..", "..")))\ | |||||
.replace(os.path.sep, ".") + "." + frappe.scrub(template_path_base.rsplit(os.path.sep, 1)[1]) | |||||
template_module_path = os.path.dirname(os.path.relpath(self.template_path, | |||||
os.path.join(frappe.get_app_path("frappe"),"..", ".."))) | |||||
template_module = template_module_path.replace(os.path.sep, ".") \ | |||||
+ "." + frappe.scrub(template_path_base.rsplit(os.path.sep, 1)[1]) | |||||
try: | try: | ||||
method = template_module.split(".", 1)[1] + ".get_context" | method = template_module.split(".", 1)[1] + ".get_context" | ||||
@@ -81,6 +84,13 @@ class WebPage(WebsiteGenerator): | |||||
if ret: | if ret: | ||||
context = ret | context = ret | ||||
except ImportError: pass | except ImportError: pass | ||||
# sidebar? | |||||
sidebar_path = os.path.join(os.path.dirname(self.template_path), "_sidebar.json") | |||||
if os.path.exists(sidebar_path): | |||||
with open(sidebar_path, "r") as f: | |||||
context.children = json.loads(f.read()) | |||||
return context | return context | ||||
def set_metatags(self, context): | def set_metatags(self, context): | ||||
@@ -116,6 +116,10 @@ class WebsiteGenerator(Document): | |||||
route.public_read = 1 | route.public_read = 1 | ||||
def get_parents(self, context): | def get_parents(self, context): | ||||
# already set | |||||
if context.parents: | |||||
return context.parents | |||||
parents = [] | parents = [] | ||||
parent = self | parent = self | ||||
while parent: | while parent: | ||||