You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

100 line
3.1 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 webnotes
  5. from webnotes.model.controller import DocListController
  6. from webnotes.website.utils import cleanup_page_name
  7. from webnotes.website.doctype.website_sitemap.website_sitemap import add_to_sitemap, update_sitemap, remove_sitemap
  8. class WebsiteGenerator(DocListController):
  9. def autoname(self):
  10. self.doc.name = cleanup_page_name(self.get_page_title())
  11. def set_page_name(self):
  12. """set page name based on parent page_name and title"""
  13. page_name = cleanup_page_name(self.get_page_title())
  14. if self.doc.is_new():
  15. self.doc.fields[self._website_config.page_name_field] = page_name
  16. else:
  17. webnotes.conn.set(self.doc, self._website_config.page_name_field, page_name)
  18. def get_parent_website_sitemap(self):
  19. return self.doc.parent_website_sitemap
  20. def setup_generator(self):
  21. self._website_config = webnotes.conn.get_values("Website Sitemap Config",
  22. {"ref_doctype": self.doc.doctype}, "*")[0]
  23. def on_update(self):
  24. self.update_sitemap()
  25. def after_rename(self, olddn, newdn, merge):
  26. webnotes.conn.sql("""update `tabWebsite Sitemap`
  27. set docname=%s where ref_doctype=%s and docname=%s""", (newdn, self.doc.doctype, olddn))
  28. if merge:
  29. self.setup_generator()
  30. remove_sitemap(ref_doctype=self.doc.doctype, docname=olddn)
  31. def on_trash(self):
  32. self.setup_generator()
  33. remove_sitemap(ref_doctype=self.doc.doctype, docname=self.doc.name)
  34. def update_sitemap(self):
  35. self.setup_generator()
  36. if self._website_config.condition_field and \
  37. not self.doc.fields.get(self._website_config.condition_field):
  38. # condition field failed, remove and return!
  39. remove_sitemap(ref_doctype=self.doc.doctype, docname=self.doc.name)
  40. return
  41. self.add_or_update_sitemap()
  42. def add_or_update_sitemap(self):
  43. page_name = self.get_page_name()
  44. existing_site_map = webnotes.conn.get_value("Website Sitemap", {"ref_doctype": self.doc.doctype,
  45. "docname": self.doc.name})
  46. opts = webnotes._dict({
  47. "page_or_generator": "Generator",
  48. "ref_doctype":self.doc.doctype,
  49. "docname": self.doc.name,
  50. "page_name": page_name,
  51. "link_name": self._website_config.name,
  52. "lastmod": webnotes.utils.get_datetime(self.doc.modified).strftime("%Y-%m-%d"),
  53. "parent_website_sitemap": self.get_parent_website_sitemap(),
  54. "page_title": self.get_page_title(),
  55. "public_read": 1 if not self._website_config.no_sidebar else 0
  56. })
  57. self.update_permissions(opts)
  58. if existing_site_map:
  59. update_sitemap(existing_site_map, opts)
  60. else:
  61. add_to_sitemap(opts)
  62. def update_permissions(self, opts):
  63. if self.meta.get_field("public_read"):
  64. opts.public_read = self.doc.public_read
  65. opts.public_write = self.doc.public_write
  66. else:
  67. opts.public_read = 1
  68. def get_page_name(self):
  69. if not self._get_page_name():
  70. self.set_page_name()
  71. return self._get_page_name()
  72. def _get_page_name(self):
  73. return self.doc.fields.get(self._website_config.page_name_field)
  74. def get_page_title(self):
  75. return self.doc.title or (self.doc.name.replace("-", " ").replace("_", " ").title())