Просмотр исходного кода

[fixes] website templating & naming fixes

version-14
Rushabh Mehta 10 лет назад
Родитель
Сommit
c5c8a54d1a
8 измененных файлов: 74 добавлений и 56 удалений
  1. +1
    -0
      .gitignore
  2. +12
    -8
      frappe/auth.py
  3. +36
    -40
      frappe/model/naming.py
  4. +3
    -1
      frappe/sessions.py
  5. +2
    -1
      frappe/utils/jinja.py
  6. +1
    -1
      frappe/website/context.py
  7. +15
    -5
      frappe/website/doctype/web_page/web_page.py
  8. +4
    -0
      frappe/website/website_generator.py

+ 1
- 0
.gitignore Просмотреть файл

@@ -8,3 +8,4 @@ locale
*.egg-info
dist/
build/
docs/

+ 12
- 8
frappe/auth.py Просмотреть файл

@@ -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


+ 36
- 40
frappe/model/naming.py Просмотреть файл

@@ -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"):


+ 3
- 1
frappe/sessions.py Просмотреть файл

@@ -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


+ 2
- 1
frappe/utils/jinja.py Просмотреть файл

@@ -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"),


+ 1
- 1
frappe/website/context.py Просмотреть файл

@@ -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)



+ 15
- 5
frappe/website/doctype/web_page/web_page.py Просмотреть файл

@@ -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):


+ 4
- 0
frappe/website/website_generator.py Просмотреть файл

@@ -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:


Загрузка…
Отмена
Сохранить