Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

85 lignes
2.5 KiB

  1. # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
  2. # License: MIT. See LICENSE
  3. """Allow adding of likes to documents"""
  4. import frappe, json
  5. from frappe.database.schema import add_column
  6. from frappe import _
  7. from frappe.desk.form.document_follow import follow_document
  8. from frappe.utils import get_link_to_form
  9. @frappe.whitelist()
  10. def toggle_like(doctype, name, add=False):
  11. """Adds / removes the current user in the `__liked_by` property of the given document.
  12. If column does not exist, will add it in the database.
  13. The `_liked_by` property is always set from this function and is ignored if set via
  14. Document API
  15. :param doctype: DocType of the document to like
  16. :param name: Name of the document to like
  17. :param add: `Yes` if like is to be added. If not `Yes` the like will be removed."""
  18. _toggle_like(doctype, name, add)
  19. def _toggle_like(doctype, name, add, user=None):
  20. """Same as toggle_like but hides param `user` from API"""
  21. if not user:
  22. user = frappe.session.user
  23. try:
  24. liked_by = frappe.db.get_value(doctype, name, "_liked_by")
  25. if liked_by:
  26. liked_by = json.loads(liked_by)
  27. else:
  28. liked_by = []
  29. if add=="Yes":
  30. if user not in liked_by:
  31. liked_by.append(user)
  32. add_comment(doctype, name)
  33. if frappe.get_cached_value("User", user, "follow_liked_documents"):
  34. follow_document(doctype, name, user)
  35. else:
  36. if user in liked_by:
  37. liked_by.remove(user)
  38. remove_like(doctype, name)
  39. frappe.db.set_value(doctype, name, "_liked_by", json.dumps(liked_by), update_modified=False)
  40. except frappe.db.ProgrammingError as e:
  41. if frappe.db.is_column_missing(e):
  42. add_column(doctype, "_liked_by", "Text")
  43. _toggle_like(doctype, name, add, user)
  44. else:
  45. raise
  46. def remove_like(doctype, name):
  47. """Remove previous Like"""
  48. # remove Comment
  49. frappe.delete_doc("Comment", [c.name for c in frappe.get_all("Comment",
  50. filters={
  51. "comment_type": "Like",
  52. "reference_doctype": doctype,
  53. "reference_name": name,
  54. "owner": frappe.session.user,
  55. }
  56. )], ignore_permissions=True)
  57. def add_comment(doctype, name):
  58. doc = frappe.get_doc(doctype, name)
  59. if doctype=="Communication" and doc.reference_doctype and doc.reference_name:
  60. link = get_link_to_form(doc.reference_doctype, doc.reference_name,
  61. "{0} {1}".format(_(doc.reference_doctype), doc.reference_name))
  62. doc.add_comment("Like", _("{0}: {1} in {2}").format(_(doc.communication_type),
  63. "<b>" + doc.subject + "</b>", link),
  64. link_doctype=doc.reference_doctype, link_name=doc.reference_name)
  65. else:
  66. doc.add_comment("Like", _("Liked"))