').hide().appendTo(this.page.main);
+
+ this.$loading = $(this.message_div('')).hide().appendTo(this.page.main);
this.$report = $('
').appendTo(this.page.main);
this.$message = $(this.message_div('')).hide().appendTo(this.page.main);
}
@@ -1738,11 +1760,6 @@ frappe.views.QueryReport = class QueryReport extends frappe.views.BaseList {
this.refresh();
}
- toggle_loading(flag) {
- this.toggle_message(flag, __('Loading') + '...');
- }
-
-
toggle_nothing_to_show(flag) {
let message = this.prepared_report
? __('This is a background report. Please set the appropriate filters and then generate a new one.')
diff --git a/frappe/public/scss/desk/list.scss b/frappe/public/scss/desk/list.scss
index 4456acabb3..a49b5a463e 100644
--- a/frappe/public/scss/desk/list.scss
+++ b/frappe/public/scss/desk/list.scss
@@ -147,7 +147,6 @@
.list-row-head {
@extend .list-row;
- padding: 15px;
cursor: default;
.list-subject {
@@ -214,6 +213,10 @@ input.list-check-all, input.list-row-checkbox {
--checkbox-right-margin: calc(var(--checkbox-size) / 2 + #{$level-margin-right});
}
+input.list-check-all {
+ margin-left: 15px;
+}
+
.render-list-checkbox {
margin-left: 15px;
}
diff --git a/frappe/public/scss/website/index.scss b/frappe/public/scss/website/index.scss
index c3da42ed34..e5e9fe95c6 100644
--- a/frappe/public/scss/website/index.scss
+++ b/frappe/public/scss/website/index.scss
@@ -192,8 +192,8 @@ h5.modal-title {
}
.hidden-xs {
- @extend .d-none;
- @extend .d-sm-block;
+ @extend .d-block;
+ @extend .d-sm-none;
}
.visible-xs {
@@ -216,6 +216,10 @@ h5.modal-title {
float: right;
}
+.pull-left {
+ float: left;
+}
+
.image-with-blur {
transition: filter 300ms ease-in-out;
filter: blur(1.5rem);
diff --git a/frappe/sessions.py b/frappe/sessions.py
index ce104968ad..bdf18f8d82 100644
--- a/frappe/sessions.py
+++ b/frappe/sessions.py
@@ -17,8 +17,8 @@ import redis
from urllib.parse import unquote
from frappe.cache_manager import clear_user_cache
-@frappe.whitelist(allow_guest=True)
-def clear(user=None):
+@frappe.whitelist()
+def clear():
frappe.local.session_obj.update(force=True)
frappe.local.db.commit()
clear_user_cache(frappe.session.user)
diff --git a/frappe/tests/test_permissions.py b/frappe/tests/test_permissions.py
index 48510f55f6..f4276b2d59 100644
--- a/frappe/tests/test_permissions.py
+++ b/frappe/tests/test_permissions.py
@@ -493,6 +493,34 @@ class TestPermissions(unittest.TestCase):
frappe.set_user("test2@example.com")
self.assertRaises(frappe.PermissionError, getdoc, 'Blog Post', doc.name)
+ def test_if_owner_permission_on_get_list(self):
+ doc = frappe.get_doc({
+ "doctype": "Blog Post",
+ "blog_category": "-test-blog-category",
+ "blogger": "_Test Blogger 1",
+ "title": "_Test If Owner Permissions on Get List",
+ "content": "_Test Blog Post Content"
+ })
+
+ doc.insert(ignore_if_duplicate=True)
+
+ update('Blog Post', 'Blogger', 0, 'if_owner', 1)
+ update('Blog Post', 'Blogger', 0, 'read', 1)
+ user = frappe.get_doc("User", "test2@example.com")
+ user.add_roles("Website Manager")
+ frappe.clear_cache(doctype="Blog Post")
+
+ frappe.set_user("test2@example.com")
+ self.assertIn(doc.name, frappe.get_list("Blog Post", pluck="name"))
+
+ # Become system manager to remove role
+ frappe.set_user("test1@example.com")
+ user.remove_roles("Website Manager")
+ frappe.clear_cache(doctype="Blog Post")
+
+ frappe.set_user("test2@example.com")
+ self.assertNotIn(doc.name, frappe.get_list("Blog Post", pluck="name"))
+
def test_if_owner_permission_on_delete(self):
update('Blog Post', 'Blogger', 0, 'if_owner', 1)
update('Blog Post', 'Blogger', 0, 'read', 1)
diff --git a/frappe/tests/test_website.py b/frappe/tests/test_website.py
index 818dc8bce6..688679a80f 100644
--- a/frappe/tests/test_website.py
+++ b/frappe/tests/test_website.py
@@ -4,6 +4,7 @@ import frappe
from frappe.utils import set_request
from frappe.website.serve import get_response, get_response_content
from frappe.website.utils import (build_response, clear_website_cache, get_home_page)
+from tenacity import retry, stop_after_attempt, retry_if_exception_type
class TestWebsite(unittest.TestCase):
@@ -196,6 +197,11 @@ class TestWebsite(unittest.TestCase):
delattr(frappe.hooks, 'page_renderer')
frappe.cache().delete_key('app_hooks')
+ # TODO: Get rid of this retry logic
+ # Added since test is flaky and we can't figure out why at this point
+ @retry(
+ stop=stop_after_attempt(5), retry=retry_if_exception_type(AssertionError),
+ )
def test_printview_page(self):
content = get_response_content('/Language/en')
self.assertIn('
', content)
diff --git a/frappe/www/update-password.html b/frappe/www/update-password.html
index 0d66fe5ab5..cacbce35b3 100644
--- a/frappe/www/update-password.html
+++ b/frappe/www/update-password.html
@@ -10,7 +10,7 @@
{{ _("Reset Password") if frappe.db.get_default('company') else _("Set Password")}}