diff --git a/frappe/__init__.py b/frappe/__init__.py index fab3a599c4..12a2540ed5 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -13,7 +13,7 @@ import os, sys, importlib, inspect, json from .exceptions import * from .utils.jinja import get_jenv, get_template, render_template -__version__ = '8.0.16' +__version__ = '8.0.17' __title__ = "Frappe Framework" local = Local() diff --git a/frappe/boot.py b/frappe/boot.py index a7edb9b20f..b5d0acce01 100644 --- a/frappe/boot.py +++ b/frappe/boot.py @@ -233,7 +233,7 @@ def load_print_css(bootinfo, print_settings): bootinfo.print_css = frappe.get_attr("frappe.www.print.get_print_style")(print_settings.print_style or "Modern", for_legacy=True) def get_unseen_notes(): - return frappe.db.sql('''select name, title, content from tabNote where notify_on_login=1 + return frappe.db.sql('''select name, title, content, notify_on_every_login from tabNote where notify_on_login=1 and expire_notification_on > %s and %s not in (select user from `tabNote Seen By` nsb where nsb.parent=tabNote.name)''', (frappe.utils.now(), frappe.session.user), as_dict=True) \ No newline at end of file diff --git a/frappe/core/page/user_permissions/user_permissions.js b/frappe/core/page/user_permissions/user_permissions.js index 4922afe817..a23e3aa0a3 100644 --- a/frappe/core/page/user_permissions/user_permissions.js +++ b/frappe/core/page/user_permissions/user_permissions.js @@ -328,6 +328,10 @@ frappe.UserPermissions = Class.extend({ } d.fields_dict["defvalue"].get_query = function(txt) { + if(!d.get_value("defkey")) { + frappe.throw(__("Please select Document Type")); + } + return { doctype: d.get_value("defkey") } diff --git a/frappe/desk/doctype/note/note.json b/frappe/desk/doctype/note/note.json index 16ae2239aa..18ca0e6684 100644 --- a/frappe/desk/doctype/note/note.json +++ b/frappe/desk/doctype/note/note.json @@ -97,6 +97,38 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 1, + "collapsible": 0, + "columns": 0, + "default": "0", + "depends_on": "notify_on_login", + "description": "If enabled, users will be notified every time they login. If not enabled, users will only be notified once.", + "fieldname": "notify_on_every_login", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_global_search": 0, + "in_list_view": 0, + "in_standard_filter": 0, + "label": "Notify Users On Every Login", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "remember_last_selected_value": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 }, { "allow_on_submit": 0, @@ -262,4 +294,4 @@ "sort_order": "ASC", "track_changes": 1, "track_seen": 0 -} \ No newline at end of file +} diff --git a/frappe/desk/page/chat/chat.py b/frappe/desk/page/chat/chat.py index eeb49391d5..a0ea8b7393 100644 --- a/frappe/desk/page/chat/chat.py +++ b/frappe/desk/page/chat/chat.py @@ -53,12 +53,13 @@ def get_list(arg=None): limit %(start)s, %(page_length)s""".format(fields), frappe.local.form_dict, as_dict=1) else: - return frappe.db.sql("""select * from `tabCommunication` + return frappe.db.sql("""select {0} from `tabCommunication` where communication_type in ('Chat', 'Notification') + and comment_type != 'Bot' and reference_doctype ='User' and ((owner=%(contact)s and reference_name=%(user)s) - or (owner=%(contact)s and reference_name=%(contact)s)) + or (owner=%(user)s and reference_name=%(contact)s)) order by creation desc limit %(start)s, %(page_length)s""".format(fields), frappe.local.form_dict, as_dict=1) diff --git a/frappe/installer.py b/frappe/installer.py index d3c4296c65..22e38d476b 100755 --- a/frappe/installer.py +++ b/frappe/installer.py @@ -39,6 +39,11 @@ def install_db(root_login="root", root_password=None, db_name=None, source_sql=N frappe.connect(db_name=db_name) check_if_ready_for_barracuda() import_db_from_sql(source_sql, verbose) + if not 'tabDefaultValue' in frappe.db.get_tables(): + print '''Database not installed, this can due to lack of permission, or that the database name exists. +Check your mysql root password, or use --force to reinstall''' + sys.exit(1) + remove_missing_apps() create_auth_table() diff --git a/frappe/public/js/frappe/desk.js b/frappe/public/js/frappe/desk.js index 90d361cd45..9c3e88a513 100644 --- a/frappe/public/js/frappe/desk.js +++ b/frappe/public/js/frappe/desk.js @@ -434,17 +434,22 @@ frappe.Application = Class.extend({ var me = this; if(frappe.boot.notes.length) { frappe.boot.notes.forEach(function(note) { - if(!note.seen) { + if(!note.seen || note.notify_on_every_login) { var d = frappe.msgprint({message:note.content, title:note.title}); d.keep_open = true; d.custom_onhide = function() { note.seen = true; - frappe.call({ - method: "frappe.desk.doctype.note.note.mark_as_seen", - args: { - note: note.name - } - }); + + // Mark note as read if the Notify On Every Login flag is not set + if (!note.notify_on_every_login) { + frappe.call({ + method: "frappe.desk.doctype.note.note.mark_as_seen", + args: { + note: note.name + } + }); + } + // next note me.show_notes(); diff --git a/frappe/public/js/frappe/form/control.js b/frappe/public/js/frappe/form/control.js index fe153323f3..21d3f3afe6 100755 --- a/frappe/public/js/frappe/form/control.js +++ b/frappe/public/js/frappe/form/control.js @@ -1806,15 +1806,9 @@ frappe.ui.form.ControlTextEditor = frappe.ui.form.ControlCode.extend({ } } else { this.upload_options.on_attach = function(fileobj, dataurl) { + me.editor.summernote('insertImage', dataurl); me.image_dialog.hide(); - me.fileobj = fileobj; - me.dataurl = dataurl; - if(me.on_attach) { - me.on_attach() - } - if(me.df.on_attach) { - me.df.on_attach(fileobj, dataurl); - } + frappe.hide_progress(); } } }, diff --git a/frappe/public/js/frappe/list/list_sidebar.js b/frappe/public/js/frappe/list/list_sidebar.js index 925fdae84b..58ce23209d 100644 --- a/frappe/public/js/frappe/list/list_sidebar.js +++ b/frappe/public/js/frappe/list/list_sidebar.js @@ -90,7 +90,7 @@ frappe.views.ListSidebar = Class.extend({ if(!r.ref_doctype || r.ref_doctype==me.doctype) { var report_type = r.report_type==='Report Builder' ? 'Report/' + r.ref_doctype : 'query-report'; - var route = r.route || report_type + '/' + r.title; + var route = r.route || report_type + '/' + (r.title || r.name); if(added.indexOf(route)===-1) { // don't repeat @@ -102,7 +102,7 @@ frappe.views.ListSidebar = Class.extend({ } $('