Ver código fonte

Merge branch 'develop'

version-14
Anand Doshi 10 anos atrás
pai
commit
027664a02c
31 arquivos alterados com 239 adições e 126 exclusões
  1. +2
    -2
      frappe/__init__.py
  2. +1
    -1
      frappe/__version__.py
  3. +14
    -9
      frappe/auth.py
  4. +1
    -1
      frappe/boot.py
  5. +3
    -0
      frappe/change_log/v5/v5_1_0.md
  6. +1
    -9
      frappe/core/doctype/page/page.json
  7. +15
    -0
      frappe/core/doctype/page/page.py
  8. +3
    -3
      frappe/core/page/user_permissions/user_permissions.js
  9. +1
    -1
      frappe/desk/desk_page.py
  10. +9
    -1
      frappe/email/doctype/email_account/email_account.py
  11. +31
    -5
      frappe/geo/doctype/currency/currency.json
  12. +1
    -1
      frappe/hooks.py
  13. +48
    -17
      frappe/print/doctype/print_format/print_format.json
  14. +13
    -4
      frappe/print/doctype/print_settings/print_settings.json
  15. +11
    -1
      frappe/public/js/frappe/dom.js
  16. +17
    -14
      frappe/public/js/frappe/form/print.js
  17. +2
    -1
      frappe/public/js/frappe/misc/help.js
  18. +1
    -1
      frappe/public/js/frappe/ui/toolbar/about.js
  19. +2
    -1
      frappe/public/js/frappe/upload.js
  20. +1
    -1
      frappe/public/js/frappe/views/ganttview.js
  21. +3
    -1
      frappe/sessions.py
  22. +1
    -1
      frappe/templates/includes/list/row_template.html
  23. +36
    -4
      frappe/templates/pages/print.py
  24. +2
    -2
      frappe/templates/print_formats/standard_macros.html
  25. +7
    -6
      frappe/templates/styles/standard.css
  26. +2
    -1
      frappe/tests/test_client_login.py
  27. +4
    -2
      frappe/utils/__init__.py
  28. +1
    -14
      frappe/website/doctype/web_page/web_page.json
  29. +1
    -20
      frappe/website/doctype/website_theme/website_theme.json
  30. +4
    -1
      frappe/website/render.py
  31. +1
    -1
      setup.py

+ 2
- 2
frappe/__init__.py Ver arquivo

@@ -538,9 +538,9 @@ def delete_doc_if_exists(doctype, name):
if db.exists(doctype, name):
delete_doc(doctype, name)

def reload_doctype(doctype):
def reload_doctype(doctype, force=False):
"""Reload DocType from model (`[module]/[doctype]/[name]/[name].json`) files."""
reload_doc(scrub(db.get_value("DocType", doctype, "module")), "doctype", scrub(doctype))
reload_doc(scrub(db.get_value("DocType", doctype, "module")), "doctype", scrub(doctype), force=force)

def reload_doc(module, dt=None, dn=None, force=False):
"""Reload Document from model (`[module]/[doctype]/[name]/[name].json`) files.


+ 1
- 1
frappe/__version__.py Ver arquivo

@@ -1,2 +1,2 @@
from __future__ import unicode_literals
__version__ = "5.0.35"
__version__ = "5.1.0"

+ 14
- 9
frappe/auth.py Ver arquivo

@@ -83,6 +83,7 @@ class LoginManager:
self.login()
else:
self.make_session(resume=True)
self.set_user_info(resume=True)

def login(self):
# clear cache
@@ -91,29 +92,33 @@ 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.user_type = self.info.user_type

self.run_trigger('on_login')
self.validate_ip_address()
self.validate_hour()
self.make_session()
self.set_user_info()

def set_user_info(self):
def set_user_info(self, resume=False):
# set sid again
frappe.local.cookie_manager.init_cookies()

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.user_type = self.info.user_type

if self.info.user_type=="Website User":
frappe.local.cookie_manager.set_cookie("system_user", "no")
frappe.local.response["message"] = "No App"
if not resume:
frappe.local.response["message"] = "No App"
else:
frappe.local.cookie_manager.set_cookie("system_user", "yes")
frappe.local.response['message'] = 'Logged In'
if not resume:
frappe.local.response['message'] = 'Logged In'

if not resume:
frappe.response["full_name"] = self.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", self.info.user_image or "")


+ 1
- 1
frappe/boot.py Ver arquivo

@@ -162,4 +162,4 @@ def load_print(bootinfo, doclist):
load_print_css(bootinfo, print_settings)

def load_print_css(bootinfo, print_settings):
bootinfo.print_css = frappe.get_attr("frappe.templates.pages.print.get_print_style")(print_settings.print_style or "Modern")
bootinfo.print_css = frappe.get_attr("frappe.templates.pages.print.get_print_style")(print_settings.print_style or "Modern", for_legacy=True)

+ 3
- 0
frappe/change_log/v5/v5_1_0.md Ver arquivo

@@ -0,0 +1,3 @@
- Change print font from Setup > Print Settings or set it for each Print Format. Font options are "Default", "Arial", "Helvetica", "Verdana", "Monospace".
- Print and full-page print preview in user's language
- Fixed inconsistent visibility of a logged-in user's image in website

+ 1
- 9
frappe/core/doctype/page/page.json Ver arquivo

@@ -87,7 +87,7 @@
"idx": 1,
"issingle": 0,
"istable": 0,
"modified": "2015-02-05 05:11:41.982758",
"modified": "2015-07-13 04:45:55.942795",
"modified_by": "Administrator",
"module": "Core",
"name": "Page",
@@ -122,14 +122,6 @@
"share": 1,
"submit": 0,
"write": 1
},
{
"apply_user_permissions": 1,
"email": 1,
"permlevel": 0,
"print": 1,
"read": 1,
"role": "All"
}
],
"read_only": 0

+ 15
- 0
frappe/core/doctype/page/page.py Ver arquivo

@@ -66,6 +66,21 @@ class Page(Document):
d[key] = self.get(key)
return d

def is_permitted(self):
"""Returns true if Page Role is not set or the user is allowed."""
from frappe.utils import has_common

allowed = [d.role for d in frappe.get_all("Page Role", fields=["role"],
filters={"parent": self.name})]
if not allowed:
return True

roles = frappe.get_roles()

if has_common(roles, allowed):
return True

def load_assets(self):
from frappe.modules import get_module_path, scrub
import os


+ 3
- 3
frappe/core/page/user_permissions/user_permissions.js Ver arquivo

@@ -243,7 +243,7 @@ frappe.UserPermissions = Class.extend({
+__("These restrictions will apply for Document Types where 'Apply User Permissions' is checked for the permission rule and a field with this value is present.")
+'</p>').appendTo(this.body);

$.each([[__("Allow User If"), 150], [__("Document Type"), 150], [__("Is"),150], ["", 50]],
$.each([[__("Allow User"), 150], [__("If Document Type"), 150], [__("Is"),150], ["", 50]],
function(i, col) {
$("<th>").html(col[0]).css("width", col[1]+"px")
.appendTo(me.table.find("thead tr"));
@@ -300,9 +300,9 @@ frappe.UserPermissions = Class.extend({
var d = new frappe.ui.Dialog({
title: __("Add A New Restriction"),
fields: [
{fieldtype:"Select", label:__("Allow User If"),
{fieldtype:"Select", label:__("Allow User"),
options:me.options.users, reqd:1, fieldname:"user"},
{fieldtype:"Select", label: __("Select Document Type"), fieldname:"defkey",
{fieldtype:"Select", label: __("If Document Type"), fieldname:"defkey",
options:me.get_link_names(), reqd:1},
{fieldtype:"Link", label:__("Is"), fieldname:"defvalue",
options:'[Select]', reqd:1},


+ 1
- 1
frappe/desk/desk_page.py Ver arquivo

@@ -11,7 +11,7 @@ def get(name):
Return the :term:`doclist` of the `Page` specified by `name`
"""
page = frappe.get_doc('Page', name)
if has_permission(page):
if page.is_permitted():
page.load_assets()
return page
else:


+ 9
- 1
frappe/email/doctype/email_account/email_account.py Ver arquivo

@@ -231,7 +231,15 @@ class EmailAccount(Document):

parent.flags.ignore_mandatory = True

parent.insert(ignore_permissions=True)
try:
parent.insert(ignore_permissions=True)
except frappe.DuplicateEntryError:
# try and find matching parent
parent_name = frappe.db.get_value(self.append_to, {sender_field: email.from_email})
if parent_name:
parent.name = parent_name
else:
parent = None

communication.is_first = True



+ 31
- 5
frappe/geo/doctype/currency/currency.json Ver arquivo

@@ -58,7 +58,7 @@
"icon": "icon-bitcoin",
"idx": 1,
"in_create": 0,
"modified": "2015-02-05 05:11:36.294972",
"modified": "2015-07-13 05:01:14.014983",
"modified_by": "Administrator",
"module": "Geo",
"name": "Currency",
@@ -81,12 +81,38 @@
{
"apply_user_permissions": 1,
"delete": 0,
"email": 1,
"email": 0,
"permlevel": 0,
"print": 1,
"print": 0,
"read": 1,
"report": 1,
"role": "All"
"report": 0,
"role": "Accounts User"
},
{
"create": 0,
"delete": 0,
"email": 0,
"export": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Sales User",
"share": 0,
"write": 0
},
{
"create": 0,
"delete": 0,
"email": 0,
"export": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Purchase User",
"share": 0,
"write": 0
}
],
"read_only": 0

+ 1
- 1
frappe/hooks.py Ver arquivo

@@ -4,7 +4,7 @@ app_title = "Frappe Framework"
app_publisher = "Frappe Technologies Pvt. Ltd."
app_description = "Full Stack Web Application Framework in Python"
app_icon = "octicon octicon-circuit-board"
app_version = "5.0.35"
app_version = "5.1.0"
app_color = "orange"

app_email = "support@frappe.io"


+ 48
- 17
frappe/print/doctype/print_format/print_format.json Ver arquivo

@@ -19,12 +19,10 @@
"search_index": 0
},
{
"depends_on": "eval:!doc.custom_format",
"fieldname": "edit_format",
"fieldtype": "Button",
"label": "Edit Format",
"permlevel": 0,
"precision": ""
"fieldname": "disabled",
"fieldtype": "Check",
"label": "Disabled",
"permlevel": 0
},
{
"fieldname": "column_break_3",
@@ -52,23 +50,18 @@
"search_index": 1
},
{
"fieldname": "disabled",
"fieldname": "custom_format",
"fieldtype": "Check",
"label": "Disabled",
"permlevel": 0
"label": "Custom Format",
"permlevel": 0,
"precision": ""
},
{
"depends_on": "custom_format",
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"permlevel": 0
},
{
"fieldname": "custom_format",
"fieldtype": "Check",
"label": "Custom Format",
"permlevel": 0,
"precision": ""
},
{
"default": "Server",
"depends_on": "custom_format",
@@ -99,6 +92,44 @@
"reqd": 0,
"search_index": 0
},
{
"depends_on": "eval:!doc.custom_format",
"fieldname": "section_break_9",
"fieldtype": "Section Break",
"permlevel": 0,
"precision": ""
},
{
"depends_on": "eval:!doc.custom_format",
"fieldname": "edit_format",
"fieldtype": "Button",
"label": "Edit Format",
"permlevel": 0,
"precision": ""
},
{
"fieldname": "column_break_11",
"fieldtype": "Column Break",
"permlevel": 0,
"precision": ""
},
{
"default": "Default",
"depends_on": "eval:!doc.custom_format",
"fieldname": "font",
"fieldtype": "Select",
"label": "Font",
"options": "Default\nArial\nHelvetica\nVerdana\nMonospace",
"permlevel": 0,
"precision": ""
},
{
"depends_on": "custom_format",
"fieldname": "section_break_13",
"fieldtype": "Section Break",
"permlevel": 0,
"precision": ""
},
{
"depends_on": "custom_format",
"fieldname": "print_format_help",
@@ -134,7 +165,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2015-02-05 05:11:42.667447",
"modified": "2015-07-15 08:01:06.284031",
"modified_by": "Administrator",
"module": "Print",
"name": "Print Format",


+ 13
- 4
frappe/print/doctype/print_settings/print_settings.json Ver arquivo

@@ -42,9 +42,13 @@
"permlevel": 0
},
{
"fieldname": "column_break_6",
"fieldtype": "Column Break",
"permlevel": 0
"default": "Default",
"fieldname": "font",
"fieldtype": "Select",
"label": "Font",
"options": "Default\nArial\nHelvetica\nVerdana\nMonospace",
"permlevel": 0,
"precision": ""
},
{
"description": "In points. Default is 9.",
@@ -53,6 +57,11 @@
"label": "Font Size",
"permlevel": 0
},
{
"fieldname": "column_break_6",
"fieldtype": "Column Break",
"permlevel": 0
},
{
"default": "1",
"description": "Print with Letterhead, unless unchecked in a particular Document",
@@ -76,7 +85,7 @@
],
"icon": "icon-cog",
"issingle": 1,
"modified": "2015-03-25 07:10:38.893958",
"modified": "2015-07-15 08:03:23.743143",
"modified_by": "Administrator",
"module": "Print",
"name": "Print Settings",


+ 11
- 1
frappe/public/js/frappe/dom.js Ver arquivo

@@ -24,10 +24,20 @@ frappe.dom = {
// execute the script globally
document.getElementsByTagName('head')[0].appendChild(el);
},
set_style: function(txt) {
set_style: function(txt, id) {
if(!txt) return;

var se = document.createElement('style');
se.type = "text/css";

if (id) {
var element = document.getElementById(id);
if (element) {
element.parentNode.removeChild(element);
}
se.id = id;
}

if (se.styleSheet) {
se.styleSheet.cssText = txt;
} else {


+ 17
- 14
frappe/public/js/frappe/form/print.js Ver arquivo

@@ -30,6 +30,7 @@ frappe.ui.form.PrintPreview = Class.extend({
.on("change", function() {
if(me.is_old_style()) {
me.wrapper.find(".btn-download-pdf").toggle(false);
me.set_style();
me.preview_old_style();
} else {
me.wrapper.find(".btn-download-pdf").toggle(true);
@@ -91,8 +92,9 @@ frappe.ui.form.PrintPreview = Class.extend({
},
preview: function() {
var me = this;
this.get_print_html(function(html) {
me.wrapper.find(".print-format").html(html);
this.get_print_html(function(out) {
me.wrapper.find(".print-format").html(out.html);
me.set_style(out.style);
});
},
printit: function() {
@@ -100,21 +102,19 @@ frappe.ui.form.PrintPreview = Class.extend({
},
new_page_preview: function(printit) {
var me = this;
this.get_print_html(function(html) {
var w = window.open("/print?"
+"doctype="+encodeURIComponent(me.frm.doc.doctype)
+"&name="+encodeURIComponent(me.frm.doc.name)
+(printit ? "&trigger_print=1" : "")
+"&format="+me.selected_format()
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1"));
if(!w) {
msgprint(__("Please enable pop-ups")); return;
}
});
var w = window.open("/print?"
+"doctype="+encodeURIComponent(me.frm.doc.doctype)
+"&name="+encodeURIComponent(me.frm.doc.name)
+(printit ? "&trigger_print=1" : "")
+"&format="+me.selected_format()
+"&no_letterhead="+(me.with_letterhead() ? "0" : "1"));
if(!w) {
msgprint(__("Please enable pop-ups")); return;
}
},
get_print_html: function(callback) {
frappe.call({
method: "frappe.templates.pages.print.get_html",
method: "frappe.templates.pages.print.get_html_and_style",
args: {
doc: this.frm.doc,
print_format: this.selected_format(),
@@ -181,5 +181,8 @@ frappe.ui.form.PrintPreview = Class.extend({
},
with_letterhead: function() {
return this.print_letterhead.is(":checked") ? 1 : 0;
},
set_style: function(style) {
frappe.dom.set_style(style || frappe.boot.print_css, "print-style");
}
})

+ 2
- 1
frappe/public/js/frappe/misc/help.js Ver arquivo

@@ -27,7 +27,8 @@ frappe.help.show_video = function(youtube_id, title) {
}
var dialog = frappe.msgprint('<iframe width="'+size[0]+'" height="'+size[1]+'" \
src="https://www.youtube.com/embed/'+ youtube_id +'" \
frameborder="0" allowfullscreen></iframe>', title || __("Help"));
frameborder="0" allowfullscreen></iframe>' + (frappe.help_feedback_link || ""),
title || __("Help"));

dialog.$wrapper.find(".modal-content").addClass("video-modal");
}


+ 1
- 1
frappe/public/js/frappe/ui/toolbar/about.js Ver arquivo

@@ -13,7 +13,7 @@ frappe.ui.misc.about = function() {
<h4>Installed Apps</h4>\
<div id='about-app-versions'>Loading versions...</div>\
<hr>\
<p class='text-muted'>&copy; 2014 Frappe Technologies Pvt. Ltd and contributers </p> \
<p class='text-muted'>&copy; 2014 Frappe Technologies Pvt. Ltd and contributors </p> \
</div>", frappe.app));

frappe.ui.misc.about_dialog = d;


+ 2
- 1
frappe/public/js/frappe/upload.js Ver arquivo

@@ -92,7 +92,8 @@ frappe.upload = {
var attachment = r.message;
opts.callback(attachment, r);
$(document).trigger("upload_complete", attachment);
}
},
btn: opts.btn
});
}
}


+ 1
- 1
frappe/public/js/frappe/views/ganttview.js Ver arquivo

@@ -53,7 +53,7 @@ frappe.views.Gantt = frappe.views.CalendarBase.extend({
fieldname:"end", "default": frappe.datetime.month_end(), input_css: {"z-index": 3}});

this.add_filters();
this.wrapper = $("<div></div>").appendTo(this.page.main);
this.wrapper = $("<div style='position:relative;z-index:1;'></div>").appendTo(this.page.main);

},
refresh: function() {


+ 3
- 1
frappe/sessions.py Ver arquivo

@@ -192,11 +192,13 @@ class Session:
if data:
# set language
self.data.update({'data': data, 'user':data.user, 'sid': self.sid})
self.user = data.user
else:
self.start_as_guest()

if self.sid != "Guest":
frappe.local.lang = frappe.translate.get_user_lang(self.data.user)
frappe.local.user_lang = frappe.translate.get_user_lang(self.data.user)
frappe.local.lang = frappe.local.user_lang

def get_session_record(self):
"""get session record, or return the standard Guest Record"""


+ 1
- 1
frappe/templates/includes/list/row_template.html Ver arquivo

@@ -1,7 +1,7 @@
{% set doc = frappe.get_doc(doc) %}
{% set subject = doc.get(meta.title_field or "name") %}
{% set route = ((is_web_form is defined and is_web_form and "{0}?name={1}".format(pathname, doc.name))
or (doc.get("get_route") and doc.get_route())
or (doc.get_route and doc.get_route())
or "{0}/{1}".format(pathname or doc.doctype, doc.name)) %}
<div class="web-list-item">
<a class="no-decoration" href="/{{ route }}" no-pjax>


+ 36
- 4
frappe/templates/pages/print.py Ver arquivo

@@ -34,12 +34,11 @@ def get_context(context):
return {
"body": get_html(doc, print_format = frappe.form_dict.format,
meta=meta, trigger_print = frappe.form_dict.trigger_print, no_letterhead=frappe.form_dict.no_letterhead),
"css": get_print_style(frappe.form_dict.style),
"css": get_print_style(frappe.form_dict.style, frappe.form_dict.format),
"comment": frappe.session.user,
"title": doc.get(meta.title_field) if meta.title_field else doc.name
}

@frappe.whitelist()
def get_html(doc, name=None, print_format=None, meta=None,
no_letterhead=None, trigger_print=False):

@@ -108,6 +107,15 @@ def get_html(doc, name=None, print_format=None, meta=None,

return html

@frappe.whitelist()
def get_html_and_style(doc, name=None, print_format=None, meta=None,
no_letterhead=None, trigger_print=False):
return {
"html": get_html(doc, name=name, print_format=print_format, meta=meta,
no_letterhead=no_letterhead, trigger_print=trigger_print),
"style": get_print_style(print_format=print_format)
}

@frappe.whitelist()
def download_pdf(doctype, name, format=None):
html = frappe.get_print(doctype, name, format)
@@ -241,13 +249,17 @@ def has_value(df, doc):

return True

def get_print_style(style=None):
def get_print_style(style=None, print_format=None, for_legacy=False):
print_settings = frappe.get_doc("Print Settings")

if not style:
style = print_settings.print_style or "Standard"

context = {"print_settings": print_settings, "print_style": style}
context = {
"print_settings": print_settings,
"print_style": style,
"font": get_font(print_settings, print_format, for_legacy)
}

css = frappe.get_template("templates/styles/standard.css").render(context)

@@ -265,6 +277,26 @@ def get_print_style(style=None):

return css

def get_font(print_settings, print_format=None, for_legacy=False):
default = '"Helvetica Neue", Helvetica, Arial, "Open Sans", sans-serif'
if for_legacy:
return default

font = None
if print_format and print_format not in ("Standard", standard_format):
print_format = frappe.get_doc("Print Format", print_format)
if print_format.font and print_format.font!="Default":
font = '{0}, sans-serif'.format(print_format.font)

if not font:
if print_settings.font and print_settings.font!="Default":
font = '{0}, sans-serif'.format(print_settings.font)

else:
font = default

return font

def get_visible_columns(data, table_meta, df):
"""Returns list of visible columns based on print_hide and if all columns have value."""
columns = []


+ 2
- 2
frappe/templates/print_formats/standard_macros.html Ver arquivo

@@ -112,8 +112,8 @@
{% else %}
<div class="print-heading">
<h2>{{ doc.select_print_heading or (doc.print_heading if doc.print_heading != None
else _(doc.doctype)) }}
<small><br>{{ doc.sub_heading if doc.sub_heading != None
else _(doc.doctype)) }}<br>
<small>{{ doc.sub_heading if doc.sub_heading != None
else doc.name }}</small>
</h2>
</div>


+ 7
- 6
frappe/templates/styles/standard.css Ver arquivo

@@ -24,6 +24,11 @@
.page-break:last-child {
border-bottom: 0px;
}

/* mozilla hack for images in table */
body:last-child .print-format td img {
width: 100% !important;
}
}

@media print {
@@ -34,8 +39,8 @@
}

.print-format {
font-size: 9pt;
font-family: "Helvetica Neue", Helvetica, Arial, "Open Sans", sans-serif;
font-size: {{ print_settings.font_size|flt or 9 }}pt;
font-family: {{ font }};
-webkit-print-color-adjust:exact;
}

@@ -80,7 +85,3 @@ table.no-border, table.no-border td {
.print-format p {
margin: 3px 0px 3px;
}

.print-format {
font-size: {{ print_settings.font_size|flt or 9 }}pt;
}

+ 2
- 1
frappe/tests/test_client_login.py Ver arquivo

@@ -15,10 +15,11 @@ class TestLogin(unittest.TestCase):
self.assertEquals(sel._driver.current_url, sel.get_localhost() + "/desk")

def test_to_do(self):
return
# too unpredictable in travis
sel.go_to_module("ToDo")
sel.primary_action()
sel.wait_for_page("Form/ToDo")
sel.set_field("description", "test description", "textarea")
sel.primary_action()
self.assertTrue(sel.wait_for_state("clean"))


+ 4
- 2
frappe/utils/__init__.py Ver arquivo

@@ -78,14 +78,16 @@ def validate_email_add(email_str, throw=False):
if not match:
return False

matched = match.group(0)

if match:
match = match.group(0)==email.lower()
match = matched==email.lower()

if not match and throw:
frappe.throw(frappe._("{0} is not a valid email id").format(email),
frappe.InvalidEmailAddressError)

return email.lower()
return matched

def random_string(length):
"""generate a random string"""


+ 1
- 14
frappe/website/doctype/web_page/web_page.json Ver arquivo

@@ -200,7 +200,7 @@
"icon": "icon-file-alt",
"idx": 1,
"max_attachments": 20,
"modified": "2015-03-24 11:22:36.357479",
"modified": "2015-07-13 04:46:59.435179",
"modified_by": "Administrator",
"module": "Website",
"name": "Web Page",
@@ -219,19 +219,6 @@
"share": 1,
"submit": 0,
"write": 1
},
{
"create": 0,
"delete": 0,
"email": 0,
"export": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "Guest",
"share": 0,
"write": 0
}
],
"search_fields": "title,main_section",


+ 1
- 20
frappe/website/doctype/website_theme/website_theme.json Ver arquivo

@@ -260,32 +260,13 @@
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"modified": "2015-02-20 11:56:21.252046",
"modified": "2015-07-13 04:45:02.429785",
"modified_by": "Administrator",
"module": "Website",
"name": "Website Theme",
"name_case": "",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 0,
"delete": 0,
"email": 0,
"export": 0,
"import": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 0,
"role": "All",
"set_user_permissions": 0,
"share": 0,
"submit": 0,
"write": 0
},
{
"create": 1,
"delete": 1,


+ 4
- 1
frappe/website/render.py Ver arquivo

@@ -18,7 +18,7 @@ class PageNotFoundError(Exception): pass
def render(path, http_status_code=None):
"""render html page"""
path = resolve_path(path.strip("/ "))
frappe.local.lang = frappe.db.get_default("lang")
set_lang()

try:
data = render_page(path)
@@ -56,6 +56,9 @@ def render(path, http_status_code=None):

return build_response(path, data, http_status_code or 200)

def set_lang():
"""Set user's lang if not Guest or use default lang"""
frappe.local.lang = getattr(frappe.local, "user_lang", None) or frappe.db.get_default("lang")

def render_403(e, pathname):
path = "message"


+ 1
- 1
setup.py Ver arquivo

@@ -1,6 +1,6 @@
from setuptools import setup, find_packages

version = "5.0.35"
version = "5.1.0"

with open("requirements.txt", "r") as f:
install_requires = f.readlines()


Carregando…
Cancelar
Salvar