@@ -8,3 +8,4 @@ locale | |||
*.egg-info | |||
dist/ | |||
build/ | |||
docs/ |
@@ -73,6 +73,9 @@ class HTTPRequest: | |||
class LoginManager: | |||
def __init__(self): | |||
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": | |||
self.login() | |||
else: | |||
@@ -85,6 +88,10 @@ class LoginManager: | |||
self.post_login() | |||
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.validate_ip_address() | |||
self.validate_hour() | |||
@@ -95,24 +102,21 @@ class LoginManager: | |||
# set sid again | |||
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.response["message"] = "No App" | |||
else: | |||
frappe.local.cookie_manager.set_cookie("system_user", "yes") | |||
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_image", info.user_image or "") | |||
frappe.local.cookie_manager.set_cookie("user_image", self.info.user_image or "") | |||
def make_session(self, resume=False): | |||
# 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 | |||
self.user = frappe.local.session_obj.user | |||
@@ -8,58 +8,54 @@ from frappe.utils import now_datetime, cint | |||
def set_new_name(doc): | |||
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") | |||
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=''): | |||
""" | |||
@@ -159,7 +155,7 @@ def validate_name(doctype, name, case=None, merge=False): | |||
return name | |||
def _get_amended_name(doc): | |||
def _set_amended_name(doc): | |||
am_id = 1 | |||
am_prefix = doc.amended_from | |||
if frappe.db.get_value(doc.doctype, doc.amended_from, "amended_from"): | |||
@@ -118,9 +118,10 @@ def get(): | |||
return bootinfo | |||
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.user = user | |||
self.full_name = full_name | |||
self.data = frappe._dict({'data': frappe._dict({})}) | |||
self.time_diff = None | |||
if resume: | |||
@@ -146,6 +147,7 @@ class Session: | |||
if self.user != "Guest": | |||
self.data['data']['last_updated'] = frappe.utils.now() | |||
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')) | |||
# insert session | |||
@@ -62,7 +62,8 @@ def get_allowed_functions_for_jenv(): | |||
"utils": datautils, | |||
"user": frappe.local.session.user, | |||
"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": \ | |||
frappe.get_attr("frappe.templates.pages.print.get_visible_columns"), | |||
@@ -73,7 +73,7 @@ def build_context(sitemap_options): | |||
if ret: | |||
context.update(ret) | |||
if hasattr(module, "get_children"): | |||
context.get_children = module.get_children | |||
context.children = module.get_children(context) | |||
add_metatags(context) | |||
@@ -2,7 +2,7 @@ | |||
# MIT License. See license.txt | |||
from __future__ import unicode_literals | |||
import frappe, re, os | |||
import frappe, re, os, json | |||
import requests, requests.exceptions | |||
from frappe.website.website_generator import WebsiteGenerator | |||
from frappe.website.router import resolve_route | |||
@@ -53,7 +53,8 @@ class WebPage(WebsiteGenerator): | |||
context.header = self.title | |||
# for sidebar | |||
context.children = self.get_children() | |||
if not context.children: | |||
context.children = self.get_children() | |||
return context | |||
@@ -69,10 +70,12 @@ class WebPage(WebsiteGenerator): | |||
pass | |||
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_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: | |||
method = template_module.split(".", 1)[1] + ".get_context" | |||
@@ -81,6 +84,13 @@ class WebPage(WebsiteGenerator): | |||
if ret: | |||
context = ret | |||
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 | |||
def set_metatags(self, context): | |||
@@ -116,6 +116,10 @@ class WebsiteGenerator(Document): | |||
route.public_read = 1 | |||
def get_parents(self, context): | |||
# already set | |||
if context.parents: | |||
return context.parents | |||
parents = [] | |||
parent = self | |||
while parent: | |||