Merge branch 'staging' into develop
This commit is contained in:
commit
06d9385829
16 changed files with 97 additions and 35 deletions
|
|
@ -17,7 +17,7 @@ from faker import Faker
|
|||
from .exceptions import *
|
||||
from .utils.jinja import (get_jenv, get_template, render_template, get_email_from_template, get_jloader)
|
||||
|
||||
__version__ = '10.1.53'
|
||||
__version__ = '10.1.54'
|
||||
__title__ = "Frappe Framework"
|
||||
|
||||
local = Local()
|
||||
|
|
|
|||
|
|
@ -91,10 +91,10 @@ def get_reference_details(reference_doctype, reference_list, doctype, reference_
|
|||
|
||||
records = frappe.get_list(doctype, filters=filters, fields=fields, as_list=True)
|
||||
for d in records:
|
||||
details = reference_details.get(d[0])
|
||||
details = reference_details.get(d[0]) or {}
|
||||
details.setdefault(frappe.scrub(doctype), []).append(d[1:])
|
||||
|
||||
return reference_details
|
||||
|
||||
def add_blank_columns_for(doctype):
|
||||
return ["" for field in field_map.get(doctype, [])]
|
||||
return ["" for field in field_map.get(doctype, [])]
|
||||
|
|
|
|||
|
|
@ -52,11 +52,9 @@ def send_sms(receiver_list, msg, sender_name = '', success_msg = True):
|
|||
|
||||
receiver_list = validate_receiver_nos(receiver_list)
|
||||
|
||||
if six.PY3: unicode = str
|
||||
|
||||
arg = {
|
||||
'receiver_list' : receiver_list,
|
||||
'message' : unicode(msg).encode('utf-8'),
|
||||
'message' : frappe.safe_decode(msg).encode('utf-8'),
|
||||
'success_msg' : success_msg
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,9 +53,12 @@ def setup_complete(args):
|
|||
and clears cache. If wizard breaks, calls `setup_wizard_exception` hook"""
|
||||
|
||||
# Setup complete: do not throw an exception, let the user continue to desk
|
||||
if cint(frappe.db.get_single_value('System Settings', 'setup_complete')):
|
||||
if (frappe.cache().hget("setup_wizard", "in_setup") or
|
||||
cint(frappe.db.get_single_value('System Settings', 'setup_complete'))):
|
||||
return
|
||||
|
||||
frappe.cache().hset("setup_wizard", "in_setup", True)
|
||||
|
||||
args = parse_args(args)
|
||||
|
||||
stages = get_setup_stages(args)
|
||||
|
|
@ -69,17 +72,19 @@ def setup_complete(args):
|
|||
for task in stage.get('tasks'):
|
||||
current_task = task
|
||||
task.get('fn')(task.get('args'))
|
||||
|
||||
except Exception:
|
||||
handle_setup_exception(args)
|
||||
return {'status': 'fail', 'fail': current_task.get('fail_msg')}
|
||||
else:
|
||||
run_setup_success(args)
|
||||
return {'status': 'ok'}
|
||||
finally:
|
||||
frappe.cache().hdel("setup_wizard", "in_setup")
|
||||
|
||||
def update_global_settings(args):
|
||||
if args.language and args.language != "english":
|
||||
if args.language and args.language != "English":
|
||||
set_default_language(get_language_code(args.lang))
|
||||
frappe.db.commit()
|
||||
frappe.clear_cache()
|
||||
|
||||
update_system_settings(args)
|
||||
|
|
@ -243,6 +248,7 @@ def load_messages(language):
|
|||
javascript files"""
|
||||
frappe.clear_cache()
|
||||
set_default_language(get_language_code(language))
|
||||
frappe.db.commit()
|
||||
m = get_dict("page", "setup-wizard")
|
||||
|
||||
for path in frappe.get_hooks("setup_wizard_requires"):
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ source_link = "https://github.com/frappe/frappe"
|
|||
app_license = "MIT"
|
||||
|
||||
develop_version = '12.x.x-develop'
|
||||
staging_version = '11.0.3-beta.11'
|
||||
staging_version = '11.0.3-beta.12'
|
||||
|
||||
app_email = "info@frappe.io"
|
||||
|
||||
|
|
@ -172,7 +172,6 @@ scheduler_events = {
|
|||
"frappe.email.doctype.auto_email_report.auto_email_report.send_daily",
|
||||
"frappe.core.doctype.feedback_request.feedback_request.delete_feedback_request",
|
||||
"frappe.core.doctype.activity_log.activity_log.clear_authentication_logs",
|
||||
"frappe.utils.change_log.check_for_update"
|
||||
],
|
||||
"daily_long": [
|
||||
"frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backups_daily",
|
||||
|
|
@ -180,7 +179,8 @@ scheduler_events = {
|
|||
],
|
||||
"weekly_long": [
|
||||
"frappe.integrations.doctype.dropbox_settings.dropbox_settings.take_backups_weekly",
|
||||
"frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_weekly"
|
||||
"frappe.integrations.doctype.s3_backup_settings.s3_backup_settings.take_backups_weekly",
|
||||
"frappe.utils.change_log.check_for_update"
|
||||
],
|
||||
"monthly": [
|
||||
"frappe.email.doctype.auto_email_report.auto_email_report.send_monthly"
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@ def has_permission(doctype, ptype="read", doc=None, verbose=False, user=None):
|
|||
if not perm:
|
||||
perm = false_if_not_shared()
|
||||
|
||||
if perm and frappe.message_log:
|
||||
frappe.message_log.pop()
|
||||
|
||||
if verbose: print("Final Permission: {0}".format(perm))
|
||||
return perm
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import 'quill-mention';
|
||||
import 'quill-mention/dist/quill.mention.min';
|
||||
|
||||
frappe.ui.form.ControlComment = frappe.ui.form.ControlTextEditor.extend({
|
||||
make_wrapper() {
|
||||
|
|
@ -68,9 +68,9 @@ frappe.ui.form.ControlComment = frappe.ui.form.ControlTextEditor.extend({
|
|||
const options = this._super();
|
||||
return Object.assign(options, {
|
||||
theme: 'bubble',
|
||||
// modules: Object.assign(options.modules, {
|
||||
// mention: this.get_mention_options()
|
||||
// })
|
||||
modules: Object.assign(options.modules, {
|
||||
mention: this.get_mention_options()
|
||||
})
|
||||
});
|
||||
},
|
||||
|
||||
|
|
@ -90,7 +90,7 @@ frappe.ui.form.ControlComment = frappe.ui.form.ControlTextEditor.extend({
|
|||
allowedChars: /^[A-Za-z0-9_]*$/,
|
||||
mentionDenotationChars: ["@"],
|
||||
isolateCharacter: true,
|
||||
source: function(searchTerm, renderList, mentionChar) {
|
||||
source: function (searchTerm, renderList, mentionChar) {
|
||||
let values;
|
||||
|
||||
if (mentionChar === "@") {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import Quill from 'quill/dist/quill';
|
||||
import Quill from 'quill';
|
||||
import { ImageDrop } from 'quill-image-drop-module';
|
||||
|
||||
// required for quill-mention
|
||||
window.Quill = Quill;
|
||||
|
||||
Quill.register('modules/imageDrop', ImageDrop);
|
||||
|
||||
// replace <p> tag with <div>
|
||||
|
|
@ -10,7 +13,13 @@ Quill.register(Block, true);
|
|||
|
||||
// table
|
||||
const Table = Quill.import('formats/table-container');
|
||||
Table.className = 'table';
|
||||
const superCreate = Table.create.bind(Table);
|
||||
Table.create = (value) => {
|
||||
const node = superCreate(value);
|
||||
node.classList.add('table');
|
||||
node.classList.add('table-bordered');
|
||||
return node;
|
||||
}
|
||||
Quill.register(Table, true);
|
||||
|
||||
// inline style
|
||||
|
|
|
|||
|
|
@ -24,7 +24,13 @@ frappe.ui.FieldGroup = frappe.ui.form.Layout.extend({
|
|||
// set default
|
||||
$.each(this.fields_list, function(i, field) {
|
||||
if (field.df["default"]) {
|
||||
field.set_input(field.df["default"]);
|
||||
let def_value = field.df["default"];
|
||||
|
||||
if (def_value == 'Today' && field.df["fieldtype"] == 'Date') {
|
||||
def_value = frappe.datetime.get_today();
|
||||
}
|
||||
|
||||
field.set_input(def_value);
|
||||
// if default and has depends_on, render its fields.
|
||||
me.refresh_dependency();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,8 +78,14 @@ frappe.views.CommunicationComposer = Class.extend({
|
|||
{label:__("Subject"), fieldtype:"Data", reqd: 1,
|
||||
fieldname:"subject", length:524288},
|
||||
{fieldtype: "Section Break"},
|
||||
{label:__("Message"), fieldtype:"Text Editor", reqd: 1,
|
||||
fieldname:"content"},
|
||||
{
|
||||
label:__("Message"),
|
||||
fieldtype:"Text Editor", reqd: 1,
|
||||
fieldname:"content",
|
||||
onchange: frappe.utils.debounce(this.save_as_draft.bind(this), 300),
|
||||
default: localStorage.getItem(this.frm.doctype + this.frm.docname) || ''
|
||||
},
|
||||
|
||||
{fieldtype: "Section Break"},
|
||||
{fieldtype: "Column Break"},
|
||||
{label:__("Send me a copy"), fieldtype:"Check",
|
||||
|
|
@ -113,7 +119,7 @@ frappe.views.CommunicationComposer = Class.extend({
|
|||
},
|
||||
prepare: function() {
|
||||
this.setup_subject_and_recipients();
|
||||
this.setup_print_language()
|
||||
this.setup_print_language();
|
||||
this.setup_print();
|
||||
this.setup_attach();
|
||||
this.setup_email();
|
||||
|
|
@ -128,7 +134,10 @@ frappe.views.CommunicationComposer = Class.extend({
|
|||
this.dialog.fields_dict.sender.set_value(this.sender || '');
|
||||
}
|
||||
this.dialog.fields_dict.subject.set_value(this.subject || '');
|
||||
this.setup_earlier_reply();
|
||||
|
||||
if(!localStorage.getItem(this.frm.doctype + this.frm.docname)) {
|
||||
this.setup_earlier_reply();
|
||||
}
|
||||
},
|
||||
|
||||
setup_subject_and_recipients: function() {
|
||||
|
|
@ -488,6 +497,18 @@ frappe.views.CommunicationComposer = Class.extend({
|
|||
return form_values;
|
||||
},
|
||||
|
||||
save_as_draft: function() {
|
||||
if (this.dialog) {
|
||||
try {
|
||||
localStorage.setItem(this.frm.doctype + this.frm.docname, this.dialog.get_value('content'));
|
||||
} catch (e) {
|
||||
// silently fail
|
||||
console.log(e);
|
||||
console.warn('[Communication] localStorage is full. Cannot save message as draft');
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
send_email: function(btn, form_values, selected_attachments, print_html, print_format) {
|
||||
var me = this;
|
||||
me.dialog.hide();
|
||||
|
|
@ -549,6 +570,16 @@ frappe.views.CommunicationComposer = Class.extend({
|
|||
cur_frm.reload_doc();
|
||||
}
|
||||
|
||||
if (localStorage.getItem(this.frm.doctype + this.frm.docname)) {
|
||||
try {
|
||||
localStorage.removeItem(this.frm.doctype + this.frm.docname);
|
||||
} catch (e) {
|
||||
// silently fail
|
||||
console.log(e);
|
||||
console.warn('[Communication] Failed to delete draft.');
|
||||
}
|
||||
}
|
||||
|
||||
// try the success callback if it exists
|
||||
if (me.success) {
|
||||
try {
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ id="page-{{ name or route }}" data-path="{{ pathname }}"
|
|||
{% endmacro %}
|
||||
|
||||
{% block content %}
|
||||
<div class="page-container" container_attributes()>
|
||||
<div class="page-container" {{ container_attributes() }}>
|
||||
{% if show_sidebar %}
|
||||
<div class="sidebar-block">
|
||||
{% include "templates/includes/web_sidebar.html" %}
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@ def get_lang_code(lang):
|
|||
|
||||
def set_default_language(lang):
|
||||
"""Set Global default language"""
|
||||
frappe.db.set_default("lang", lang)
|
||||
if frappe.db.get_default("lang") != lang:
|
||||
frappe.db.set_default("lang", lang)
|
||||
frappe.local.lang = lang
|
||||
|
||||
def get_all_languages():
|
||||
|
|
|
|||
|
|
@ -9,9 +9,9 @@ import frappe
|
|||
import requests
|
||||
import subprocess # nosec
|
||||
from frappe.utils import cstr
|
||||
from frappe.utils.gitutils import get_app_last_commit_ref, get_app_branch
|
||||
import subprocess # nosec
|
||||
from frappe.utils.gitutils import get_app_branch
|
||||
from frappe import _, safe_decode
|
||||
import git
|
||||
|
||||
def get_change_log(user=None):
|
||||
if not user: user = frappe.session.user
|
||||
|
|
@ -104,7 +104,12 @@ def get_versions():
|
|||
}
|
||||
|
||||
if versions[app]['branch'] != 'master':
|
||||
branch_version = app_hooks.get('{0}_version'.format(versions[app]['branch']))
|
||||
try:
|
||||
app_repo = git.Repo(os.path.join('..', 'apps', '{}'.format(app)))
|
||||
branch_version = '-'.join(app_repo.git.describe().split('-')[:2])
|
||||
branch_version = [branch_version.strip('v')]
|
||||
except:
|
||||
branch_version = app_hooks.get('{0}_version'.format(versions[app]['branch']))
|
||||
if branch_version:
|
||||
versions[app]['branch_version'] = branch_version[0] + ' ({0})'.format(get_app_last_commit_ref(app))
|
||||
|
||||
|
|
@ -146,7 +151,7 @@ def check_for_update():
|
|||
|
||||
github_version, org_name = app_details
|
||||
# Get local instance's current version or the app
|
||||
instance_version = Version(apps[app]['version'])
|
||||
instance_version = Version(apps[app]['branch_version'].split(' ')[0])
|
||||
# Compare and popup update message
|
||||
for update_type in updates:
|
||||
if github_version.__dict__[update_type] > instance_version.__dict__[update_type]:
|
||||
|
|
@ -158,6 +163,7 @@ def check_for_update():
|
|||
title = apps[app]['title'],
|
||||
))
|
||||
break
|
||||
if github_version.__dict__[update_type] < instance_version.__dict__[update_type]: break
|
||||
|
||||
add_message_to_redis(updates)
|
||||
|
||||
|
|
@ -222,6 +228,7 @@ def show_update_popup():
|
|||
return
|
||||
|
||||
updates = json.loads(update_info)
|
||||
current_versions = get_versions()
|
||||
|
||||
# Check if user is int the set of users to send update message to
|
||||
update_message = ""
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
"moment-timezone": "^0.5.21",
|
||||
"quill": "2.0.0-dev.2",
|
||||
"quill-image-drop-module": "^1.0.3",
|
||||
"quill-mention": "^2.0.2",
|
||||
"quill-mention": "https://github.com/netchampfaris/quill-mention",
|
||||
"redis": "^2.8.0",
|
||||
"showdown": "^1.8.6",
|
||||
"socket.io": "^2.0.4",
|
||||
|
|
|
|||
|
|
@ -56,3 +56,5 @@ faker
|
|||
stripe
|
||||
psycopg2-binary
|
||||
coverage
|
||||
urllib3==1.23
|
||||
GitPython==2.1.11
|
||||
|
|
|
|||
|
|
@ -3036,10 +3036,9 @@ quill-image-drop-module@^1.0.3:
|
|||
dependencies:
|
||||
quill "^1.2.2"
|
||||
|
||||
quill-mention@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/quill-mention/-/quill-mention-2.0.2.tgz#8e89e1d6b625d2df1b5a04af9338e35b18e91fce"
|
||||
integrity sha512-G6VDFWVXO4ERuPamZEk+2VLvngZV18OxEzjPXsSayQij6K/s3RziiLEQ9MmRAr4umQVJ85W2VB7l4dX2qIW0MQ==
|
||||
"quill-mention@https://github.com/netchampfaris/quill-mention":
|
||||
version "2.0.4"
|
||||
resolved "https://github.com/netchampfaris/quill-mention#c85d60ee8047bd6b15e319f410423dbb3f06b2e6"
|
||||
dependencies:
|
||||
quill "^1.3.4"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue