* feat: Disable Sharing globally
- Checkbox in System Settings
- If disabled, avoid share UI render
- Share APIs return None (non-obstructing) if share APIs are invoked
* feat: Settings checkbox must toggle share permission globally
- Treat feature like a perm toggler. Essentially noone is allowed to explicity share anything
- Implicit sharing via `ignore_share_permissions` is allowed. Devs can decide where sharing should happen under the hood
- UI is made read only and not hidden. Users must see who doc is already shared with
- Make sure perm APIs used by share feature return false if sharing is disabled
- Rename checkbox to `Disable Document Sharing`
* test: (server side) Impact of disabling sharing on APIs
- Also, fix missed system setting rename in `assign_to`
* fix: Inform assigner if assignee lacks perms and sharing is disabled
- misc: readable conditions
* fix: throw instead of msgprint
* fix: Typo and appropriate message for `throw`
---------
Co-authored-by: Ankush Menat <ankush@frappe.io>
```
File "/home/ankush/benches/develop/apps/frappe/frappe/database/database.py", line 920, in get_default
d = self.get_defaults(key, parent)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ankush/benches/develop/apps/frappe/frappe/database/database.py", line 936, in get_defaults
defaults = frappe.defaults.get_defaults_for(parent)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ankush/benches/develop/apps/frappe/frappe/defaults.py", line 222, in get_defaults_for
.run(as_dict=True)
^^^^^^^^^^^^^^^^^
File "/home/ankush/benches/develop/apps/frappe/frappe/query_builder/utils.py", line 85, in execute_query
return frappe.db.sql(query, params, *args, **kwargs) # nosemgrep
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ankush/benches/develop/apps/frappe/frappe/database/database.py", line 264, in sql
self.log_query(query, values, debug, explain)
File "/home/ankush/benches/develop/apps/frappe/frappe/database/mariadb/database.py", line 203, in log_query
self.last_query = query = self._cursor._last_executed
^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'Cursor' object has no attribute '_last_executed'. Did you mean: '_check_executed'?
```
* chore: enhance UX of New Email dialog
* do not show contacts without an email
* use name as value, y? if several contacts use the same email address, the entry will be displayed several times, but always with the same description, which leads to confusion - using name as value makes the entries distinguishable
* chore: ignore semgrep
Rewriting the query is not in the scope of this PR.
* chore: keep semgrep failing on raw query
[skip ci]
* fix: use email_id as value
* Revert "fix: use email_id as value"
This reverts commit e4c44e2094ddb9b525bc34d400642dcee5656096.
* chore: comment confusing code
---------
Co-authored-by: Raffael Meyer <14891507+barredterra@users.noreply.github.com>
Co-authored-by: Ankush Menat <ankushmenat@gmail.com>
* YouTube channel addded in about section.
I have added ERPNext YouTube channel reference in the about section.
#Create an official Handle for YouTube Channel (Like @erpnext or erpnextofficial)
* chore: handle
[skip ci]
* Update about.js
YouTube channel name changed.
---------
[skip ci]
Steps to reproduce:
1. visit a list view that's quite active
2. move to some other page
3. list view data keeps getting refreshed in background
Fix: Only refresh when user is back on list view