25'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.
 
 
 
 
 
 

114 satır
3.5 KiB

  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. from __future__ import unicode_literals
  4. import frappe
  5. from frappe.model.controller import DocListController
  6. from frappe.website.utils import cleanup_page_name
  7. from frappe.website.doctype.website_route.website_route import add_to_sitemap, update_sitemap, remove_sitemap
  8. def call_website_generator(bean, method, *args, **kwargs):
  9. getattr(WebsiteGenerator(bean.doc, bean.doclist), method)(*args, **kwargs)
  10. class WebsiteGenerator(DocListController):
  11. def autoname(self):
  12. self.doc.name = cleanup_page_name(self.get_page_title())
  13. def set_page_name(self):
  14. """set page name based on parent page_name and title"""
  15. page_name = cleanup_page_name(self.get_page_title())
  16. if self.doc.is_new():
  17. self.doc.fields[self._website_config.page_name_field] = page_name
  18. else:
  19. frappe.conn.set(self.doc, self._website_config.page_name_field, page_name)
  20. return page_name
  21. def get_parent_website_route(self):
  22. return self.doc.parent_website_route
  23. def setup_generator(self):
  24. self._website_config = frappe.conn.get_values("Website Template",
  25. {"ref_doctype": self.doc.doctype}, "*")[0]
  26. def on_update(self):
  27. self.update_sitemap()
  28. frappe.add_version(self.doclist)
  29. def after_rename(self, olddn, newdn, merge):
  30. frappe.conn.sql("""update `tabWebsite Route`
  31. set docname=%s where ref_doctype=%s and docname=%s""", (newdn, self.doc.doctype, olddn))
  32. if merge:
  33. self.setup_generator()
  34. remove_sitemap(ref_doctype=self.doc.doctype, docname=olddn)
  35. def on_trash(self):
  36. self.setup_generator()
  37. remove_sitemap(ref_doctype=self.doc.doctype, docname=self.doc.name)
  38. def update_sitemap(self):
  39. self.setup_generator()
  40. if self._website_config.condition_field and \
  41. not self.doc.fields.get(self._website_config.condition_field):
  42. # condition field failed, remove and return!
  43. remove_sitemap(ref_doctype=self.doc.doctype, docname=self.doc.name)
  44. return
  45. self.add_or_update_sitemap()
  46. def add_or_update_sitemap(self):
  47. page_name = self.get_page_name()
  48. existing_site_map = frappe.conn.get_value("Website Route", {"ref_doctype": self.doc.doctype,
  49. "docname": self.doc.name})
  50. opts = frappe._dict({
  51. "page_or_generator": "Generator",
  52. "ref_doctype":self.doc.doctype,
  53. "idx": self.doc.idx,
  54. "docname": self.doc.name,
  55. "page_name": page_name,
  56. "link_name": self._website_config.name,
  57. "lastmod": frappe.utils.get_datetime(self.doc.modified).strftime("%Y-%m-%d"),
  58. "parent_website_route": self.get_parent_website_route(),
  59. "page_title": self.get_page_title(),
  60. "public_read": 1 if not self._website_config.no_sidebar else 0
  61. })
  62. self.update_permissions(opts)
  63. if existing_site_map:
  64. idx = update_sitemap(existing_site_map, opts)
  65. else:
  66. idx = add_to_sitemap(opts)
  67. if idx!=None and self.doc.idx != idx:
  68. frappe.conn.set(self.doc, "idx", idx)
  69. def update_permissions(self, opts):
  70. if self.meta.get_field("public_read"):
  71. opts.public_read = self.doc.public_read
  72. opts.public_write = self.doc.public_write
  73. else:
  74. opts.public_read = 1
  75. def get_page_name(self):
  76. page_name = self._get_page_name()
  77. if not page_name:
  78. page_name = self.set_page_name()
  79. return self._get_page_name()
  80. def _get_page_name(self):
  81. if self.meta.has_field(self._website_config.page_name_field):
  82. return self.doc.fields.get(self._website_config.page_name_field)
  83. else:
  84. return cleanup_page_name(self.get_page_title())
  85. def get_page_title(self):
  86. return self.doc.title or (self.doc.name.replace("-", " ").replace("_", " ").title())