@@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json | |||||
from .exceptions import * | from .exceptions import * | ||||
from .utils.jinja import get_jenv, get_template, render_template | from .utils.jinja import get_jenv, get_template, render_template | ||||
__version__ = "7.0.30" | |||||
__version__ = "7.0.31" | |||||
local = Local() | local = Local() | ||||
@@ -110,9 +110,10 @@ def restore(context, sql_file_path, mariadb_root_username=None, mariadb_root_pas | |||||
os.remove(private) | os.remove(private) | ||||
@click.command('reinstall') | @click.command('reinstall') | ||||
@click.option('--admin-password', help='Administrator Password for reinstalled site') | |||||
@click.option('--yes', is_flag=True, default=False, help='Pass --yes to skip confirmation') | @click.option('--yes', is_flag=True, default=False, help='Pass --yes to skip confirmation') | ||||
@pass_context | @pass_context | ||||
def reinstall(context, yes=False): | |||||
def reinstall(context, admin_password=None, yes=False): | |||||
"Reinstall site ie. wipe all data and start over" | "Reinstall site ie. wipe all data and start over" | ||||
if not yes: | if not yes: | ||||
@@ -134,7 +135,7 @@ def reinstall(context, yes=False): | |||||
frappe.init(site=site) | frappe.init(site=site) | ||||
_new_site(frappe.conf.db_name, site, verbose=context.verbose, force=True, reinstall=True, | _new_site(frappe.conf.db_name, site, verbose=context.verbose, force=True, reinstall=True, | ||||
install_apps=installed) | |||||
install_apps=installed, admin_password=admin_password) | |||||
@click.command('install-app') | @click.command('install-app') | ||||
@click.argument('app') | @click.argument('app') | ||||
@@ -117,7 +117,7 @@ def add_user_icon(_doctype, label=None, link=None, type='link', standard=0): | |||||
new_icon = frappe.get_doc({ | new_icon = frappe.get_doc({ | ||||
'doctype': 'Desktop Icon', | 'doctype': 'Desktop Icon', | ||||
'label': label, | 'label': label, | ||||
'module_name': _doctype, | |||||
'module_name': label, | |||||
'link': link, | 'link': link, | ||||
'type': type, | 'type': type, | ||||
'_doctype': _doctype, | '_doctype': _doctype, | ||||
@@ -4,7 +4,7 @@ | |||||
from __future__ import unicode_literals | from __future__ import unicode_literals | ||||
"""build query for doclistview and return results""" | """build query for doclistview and return results""" | ||||
import frappe, json | |||||
import frappe, json, copy | |||||
import frappe.defaults | import frappe.defaults | ||||
import frappe.share | import frappe.share | ||||
import frappe.permissions | import frappe.permissions | ||||
@@ -71,6 +71,7 @@ class DatabaseQuery(object): | |||||
self.flags.ignore_permissions = ignore_permissions | self.flags.ignore_permissions = ignore_permissions | ||||
self.user = user or frappe.session.user | self.user = user or frappe.session.user | ||||
self.update = update | self.update = update | ||||
self.list_settings_fields = copy.deepcopy(self.fields) | |||||
#self.debug = True | #self.debug = True | ||||
if query: | if query: | ||||
@@ -498,7 +499,7 @@ class DatabaseQuery(object): | |||||
list_settings['order_by'] = self.order_by | list_settings['order_by'] = self.order_by | ||||
if self.save_list_settings_fields: | if self.save_list_settings_fields: | ||||
list_settings['fields'] = self.fields | |||||
list_settings['fields'] = self.list_settings_fields | |||||
update_list_settings(self.doctype, list_settings) | update_list_settings(self.doctype, list_settings) | ||||
@@ -135,4 +135,6 @@ execute:frappe.db.sql('''delete from `tabSingles` where doctype="Email Settings" | |||||
execute:frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''") | execute:frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''") | ||||
frappe.patches.v7_0.rename_newsletter_list_to_email_group | frappe.patches.v7_0.rename_newsletter_list_to_email_group | ||||
frappe.patches.v7_0.replace_upgrade_link_limit | frappe.patches.v7_0.replace_upgrade_link_limit | ||||
frappe.patches.v7_0.set_email_group | |||||
frappe.patches.v7_0.set_email_group | |||||
execute:frappe.db.set_value("Print Settings", "Print Settings", "add_draft_heading", 1) | |||||
frappe.patches.v7_0.cleanup_list_settings |
@@ -0,0 +1,18 @@ | |||||
from frappe.installer import create_list_settings_table | |||||
from frappe.model.utils.list_settings import update_list_settings | |||||
import frappe, json | |||||
def execute(): | |||||
list_settings = frappe.db.sql("select user, doctype, data from __ListSettings", as_dict=1) | |||||
for ls in list_settings: | |||||
if ls and ls.data: | |||||
data = json.loads(ls.data) | |||||
fields = data["fields"] | |||||
for field in fields: | |||||
if "name as" in field: | |||||
fields.remove(field) | |||||
data["fields"] = fields | |||||
frappe.db.sql("update __ListSettings set data = %s where user=%s and doctype=%s", | |||||
(json.dumps(data), ls.user, ls.doctype)) | |||||
@@ -8,11 +8,13 @@ | |||||
"docstatus": 0, | "docstatus": 0, | ||||
"doctype": "DocType", | "doctype": "DocType", | ||||
"document_type": "System", | "document_type": "System", | ||||
"editable_grid": 0, | |||||
"fields": [ | "fields": [ | ||||
{ | { | ||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"fieldname": "pdf_settings", | "fieldname": "pdf_settings", | ||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
@@ -37,6 +39,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "1", | "default": "1", | ||||
"description": "Send Email Print Attachments as PDF (Recommended)", | "description": "Send Email Print Attachments as PDF (Recommended)", | ||||
"fieldname": "send_print_as_pdf", | "fieldname": "send_print_as_pdf", | ||||
@@ -63,6 +66,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "1", | "default": "1", | ||||
"fieldname": "repeat_header_footer", | "fieldname": "repeat_header_footer", | ||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
@@ -89,6 +93,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"fieldname": "column_break_4", | "fieldname": "column_break_4", | ||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
@@ -113,6 +118,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "A4", | "default": "A4", | ||||
"fieldname": "pdf_page_size", | "fieldname": "pdf_page_size", | ||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
@@ -139,6 +145,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"fieldname": "view_link_in_email", | "fieldname": "view_link_in_email", | ||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
@@ -163,6 +170,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "1", | "default": "1", | ||||
"description": "", | "description": "", | ||||
"fieldname": "attach_view_link", | "fieldname": "attach_view_link", | ||||
@@ -190,6 +198,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"fieldname": "print_style_section", | "fieldname": "print_style_section", | ||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
@@ -214,6 +223,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "Modern", | "default": "Modern", | ||||
"fieldname": "print_style", | "fieldname": "print_style", | ||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
@@ -240,6 +250,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "Default", | "default": "Default", | ||||
"fieldname": "font", | "fieldname": "font", | ||||
"fieldtype": "Select", | "fieldtype": "Select", | ||||
@@ -267,6 +278,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"description": "In points. Default is 9.", | "description": "In points. Default is 9.", | ||||
"fieldname": "font_size", | "fieldname": "font_size", | ||||
"fieldtype": "Float", | "fieldtype": "Float", | ||||
@@ -292,6 +304,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"fieldname": "column_break_6", | "fieldname": "column_break_6", | ||||
"fieldtype": "Column Break", | "fieldtype": "Column Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
@@ -315,6 +328,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "1", | "default": "1", | ||||
"description": "", | "description": "", | ||||
"fieldname": "with_letterhead", | "fieldname": "with_letterhead", | ||||
@@ -341,6 +355,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "1", | "default": "1", | ||||
"description": "", | "description": "", | ||||
"fieldname": "allow_print_for_draft", | "fieldname": "allow_print_for_draft", | ||||
@@ -368,6 +383,34 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"default": "1", | |||||
"fieldname": "add_draft_heading", | |||||
"fieldtype": "Check", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_list_view": 0, | |||||
"label": "Always add \"Draft\" Heading for printing draft documents", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"columns": 0, | |||||
"description": "", | "description": "", | ||||
"fieldname": "allow_print_for_cancelled", | "fieldname": "allow_print_for_cancelled", | ||||
"fieldtype": "Check", | "fieldtype": "Check", | ||||
@@ -394,6 +437,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"fieldname": "section_break_8", | "fieldname": "section_break_8", | ||||
"fieldtype": "Section Break", | "fieldtype": "Section Break", | ||||
"hidden": 0, | "hidden": 0, | ||||
@@ -417,6 +461,7 @@ | |||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
"bold": 0, | "bold": 0, | ||||
"collapsible": 0, | "collapsible": 0, | ||||
"columns": 0, | |||||
"fieldname": "print_style_preview", | "fieldname": "print_style_preview", | ||||
"fieldtype": "HTML", | "fieldtype": "HTML", | ||||
"hidden": 0, | "hidden": 0, | ||||
@@ -449,7 +494,7 @@ | |||||
"issingle": 1, | "issingle": 1, | ||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 0, | "max_attachments": 0, | ||||
"modified": "2016-06-22 11:44:01.940693", | |||||
"modified": "2016-09-12 03:19:17.867459", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Print", | "module": "Print", | ||||
"name": "Print Settings", | "name": "Print Settings", | ||||
@@ -470,8 +515,6 @@ | |||||
"print": 0, | "print": 0, | ||||
"read": 1, | "read": 1, | ||||
"report": 0, | "report": 0, | ||||
"restrict": 0, | |||||
"restricted": 0, | |||||
"role": "System Manager", | "role": "System Manager", | ||||
"set_user_permissions": 0, | "set_user_permissions": 0, | ||||
"share": 1, | "share": 1, | ||||
@@ -57,13 +57,15 @@ def clear_sessions(user=None, keep_current=False, device=None): | |||||
if not device: | if not device: | ||||
device = frappe.session.data.device or "desktop" | device = frappe.session.data.device or "desktop" | ||||
simultaneous_sessions = frappe.db.get_value('User', user, 'simultaneous_sessions') or 1 | |||||
limit = 0 | |||||
if user == frappe.session.user: | |||||
simultaneous_sessions = frappe.db.get_value('User', user, 'simultaneous_sessions') or 1 | |||||
limit = simultaneous_sessions - 1 | |||||
condition = '' | condition = '' | ||||
if keep_current: | if keep_current: | ||||
condition = ' and sid != "{0}"'.format(frappe.session.sid) | condition = ' and sid != "{0}"'.format(frappe.session.sid) | ||||
limit = simultaneous_sessions - 1 | |||||
for i, sid in enumerate(frappe.db.sql_list("""select sid from tabSessions | for i, sid in enumerate(frappe.db.sql_list("""select sid from tabSessions | ||||
where user=%s and device=%s {condition} | where user=%s and device=%s {condition} | ||||
@@ -4,7 +4,7 @@ | |||||
{% for page in layout %} | {% for page in layout %} | ||||
<div class="page-break"> | <div class="page-break"> | ||||
<div {% if print_settings.repeat_header_footer %} id="header-html" class="hidden-pdf" {% endif %}> | <div {% if print_settings.repeat_header_footer %} id="header-html" class="hidden-pdf" {% endif %}> | ||||
{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer) }} | |||||
{{ add_header(loop.index, layout|len, doc, letter_head, no_letterhead, footer, print_settings) }} | |||||
</div> | </div> | ||||
{% if print_settings.repeat_header_footer %} | {% if print_settings.repeat_header_footer %} | ||||
@@ -110,7 +110,7 @@ data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}" | |||||
{%- endif -%} | {%- endif -%} | ||||
{% endmacro %} | {% endmacro %} | ||||
{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer) -%} | |||||
{%- macro add_header(page_num, max_pages, doc, letter_head, no_letterhead, footer, print_settings=None) -%} | |||||
{% if letter_head and not no_letterhead %} | {% if letter_head and not no_letterhead %} | ||||
<div class="letter-head">{{ letter_head }}</div> | <div class="letter-head">{{ letter_head }}</div> | ||||
{% endif %} | {% endif %} | ||||
@@ -125,7 +125,7 @@ data-fieldname="{{ df.fieldname }}" data-fieldtype="{{ df.fieldtype }}" | |||||
</h2> | </h2> | ||||
</div> | </div> | ||||
{% endif %} | {% endif %} | ||||
{%- if doc.meta.is_submittable and doc.docstatus==0-%} | |||||
{%- if doc.meta.is_submittable and doc.docstatus==0 and (print_settings==None or print_settings.add_draft_heading) -%} | |||||
<div class="text-center" document-status="draft"> | <div class="text-center" document-status="draft"> | ||||
<h4 style="margin: 0px;">{{ _("DRAFT") }}</h4> | <h4 style="margin: 0px;">{{ _("DRAFT") }}</h4> | ||||
</div> | </div> | ||||
@@ -210,7 +210,8 @@ def login_oauth_user(data=None, provider=None, state=None, email_id=None, key=No | |||||
return | return | ||||
try: | try: | ||||
update_oauth_user(user, data, provider) | |||||
if update_oauth_user(user, data, provider) is False: | |||||
return | |||||
except SignupDisabledError: | except SignupDisabledError: | ||||
return frappe.respond_as_web_page("Signup is Disabled", "Sorry. Signup from Website is disabled.", | return frappe.respond_as_web_page("Signup is Disabled", "Sorry. Signup from Website is disabled.", | ||||
@@ -260,6 +261,9 @@ def update_oauth_user(user, data, provider): | |||||
else: | else: | ||||
user = frappe.get_doc("User", user) | user = frappe.get_doc("User", user) | ||||
if not user.enabled: | |||||
frappe.respond_as_web_page(_('Not Allowed'), _('User {0} is disabled').format(user.email)) | |||||
return False | |||||
if provider=="facebook" and not user.get("fb_userid"): | if provider=="facebook" and not user.get("fb_userid"): | ||||
save = True | save = True | ||||