Merge branch 'staging' into develop

This commit is contained in:
Ameya Shenoy 2018-10-19 12:51:40 +00:00
commit 06d9385829
No known key found for this signature in database
GPG key ID: AC016A555657D0A3
16 changed files with 97 additions and 35 deletions

View file

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

View file

@ -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, [])]

View file

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

View file

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

View file

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

View file

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

View file

@ -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 === "@") {

View file

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

View file

@ -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();
}

View file

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

View file

@ -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" %}

View file

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

View file

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

View file

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

View file

@ -56,3 +56,5 @@ faker
stripe
psycopg2-binary
coverage
urllib3==1.23
GitPython==2.1.11

View file

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