No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 
 
 

113 líneas
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_sitemap.website_sitemap 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_sitemap(self):
  22. return self.doc.parent_website_sitemap
  23. def setup_generator(self):
  24. self._website_config = frappe.conn.get_values("Website Sitemap Config",
  25. {"ref_doctype": self.doc.doctype}, "*")[0]
  26. def on_update(self):
  27. self.update_sitemap()
  28. def after_rename(self, olddn, newdn, merge):
  29. frappe.conn.sql("""update `tabWebsite Sitemap`
  30. set docname=%s where ref_doctype=%s and docname=%s""", (newdn, self.doc.doctype, olddn))
  31. if merge:
  32. self.setup_generator()
  33. remove_sitemap(ref_doctype=self.doc.doctype, docname=olddn)
  34. def on_trash(self):
  35. self.setup_generator()
  36. remove_sitemap(ref_doctype=self.doc.doctype, docname=self.doc.name)
  37. def update_sitemap(self):
  38. self.setup_generator()
  39. if self._website_config.condition_field and \
  40. not self.doc.fields.get(self._website_config.condition_field):
  41. # condition field failed, remove and return!
  42. remove_sitemap(ref_doctype=self.doc.doctype, docname=self.doc.name)
  43. return
  44. self.add_or_update_sitemap()
  45. def add_or_update_sitemap(self):
  46. page_name = self.get_page_name()
  47. existing_site_map = frappe.conn.get_value("Website Sitemap", {"ref_doctype": self.doc.doctype,
  48. "docname": self.doc.name})
  49. opts = frappe._dict({
  50. "page_or_generator": "Generator",
  51. "ref_doctype":self.doc.doctype,
  52. "idx": self.doc.idx,
  53. "docname": self.doc.name,
  54. "page_name": page_name,
  55. "link_name": self._website_config.name,
  56. "lastmod": frappe.utils.get_datetime(self.doc.modified).strftime("%Y-%m-%d"),
  57. "parent_website_sitemap": self.get_parent_website_sitemap(),
  58. "page_title": self.get_page_title(),
  59. "public_read": 1 if not self._website_config.no_sidebar else 0
  60. })
  61. self.update_permissions(opts)
  62. if existing_site_map:
  63. idx = update_sitemap(existing_site_map, opts)
  64. else:
  65. idx = add_to_sitemap(opts)
  66. if idx!=None and self.doc.idx != idx:
  67. frappe.conn.set(self.doc, "idx", idx)
  68. def update_permissions(self, opts):
  69. if self.meta.get_field("public_read"):
  70. opts.public_read = self.doc.public_read
  71. opts.public_write = self.doc.public_write
  72. else:
  73. opts.public_read = 1
  74. def get_page_name(self):
  75. page_name = self._get_page_name()
  76. if not page_name:
  77. page_name = self.set_page_name()
  78. return self._get_page_name()
  79. def _get_page_name(self):
  80. if self.meta.has_field(self._website_config.page_name_field):
  81. return self.doc.fields.get(self._website_config.page_name_field)
  82. else:
  83. return cleanup_page_name(self.get_page_title())
  84. def get_page_title(self):
  85. return self.doc.title or (self.doc.name.replace("-", " ").replace("_", " ").title())