[fixes] website templating & naming fixes
This commit is contained in:
parent
60c88b8e80
commit
c5c8a54d1a
8 changed files with 80 additions and 62 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -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
|
||||
|
||||
# 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)
|
||||
|
||||
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"))
|
||||
|
||||
else:
|
||||
doc.name = make_autoname(autoname, 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)
|
||||
autoname = frappe.get_meta(doc.doctype).autoname
|
||||
|
||||
doc.name = doc.name.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()
|
||||
|
||||
validate_name(doc.doctype, doc.name)
|
||||
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+'.#####')
|
||||
|
||||
# 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)
|
||||
|
||||
# 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)
|
||||
|
||||
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:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue