Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 
 

237 rindas
6.2 KiB

  1. # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
  2. # MIT License. See license.txt
  3. import webnotes
  4. from webnotes.webutils import get_access, can_cache
  5. from webnotes.templates.website_group.forum import get_post_list_html
  6. doctype = "Website Group"
  7. no_cache = 1
  8. def get_context(context):
  9. group, view = guess_group_view(context)
  10. try:
  11. if not has_access(context.access, view):
  12. raise webnotes.PermissionError
  13. return get_group_context(group, view, context)
  14. except webnotes.DoesNotExistError:
  15. return {
  16. "content": '<div class="alert alert-danger full-page">'
  17. 'The page you are looking for does not exist.</div>'
  18. }
  19. except webnotes.PermissionError:
  20. return {
  21. "content": '<div class="alert alert-danger full-page">'
  22. 'You are not permitted to view this page.</div>'
  23. }
  24. def get_group_context(group, view, context):
  25. cache_key = "website_group_context:{}:{}".format(group, view)
  26. views = get_views(context.bean.doc.group_type)
  27. view = webnotes._dict(views.get(view))
  28. if can_cache(view.no_cache):
  29. group_context = webnotes.cache().get_value(cache_key)
  30. if group_context:
  31. return group_context
  32. group_context = build_group_context(group, view, views, context)
  33. if can_cache(view.get("no_cache")):
  34. webnotes.cache().set_value(cache_key, group_context)
  35. return group_context
  36. def build_group_context(group, view, views, context):
  37. title = "{} - {}".format(context.bean.doc.group_title, view.get("label"))
  38. group_context = webnotes._dict({
  39. "group": context.bean.doc.fields,
  40. "view": view,
  41. "views": [v[1] for v in sorted(views.iteritems(), key=lambda (k, v): v.get("idx"))],
  42. "title": title,
  43. "pathname": context.pathname
  44. })
  45. group_context.update(build_view_context(group_context))
  46. return group_context
  47. def build_view_context(context):
  48. from webnotes.templates.website_group.post import get_post_context
  49. if context.view.name in ("popular", "feed", "open", "closed", "upcoming", "past"):
  50. context.post_list_html = get_post_list_html(context.group.name, context.view.name)
  51. elif context.view.name == "edit":
  52. context.post = webnotes.doc("Post", webnotes.form_dict.name).fields
  53. if context.post.assigned_to:
  54. context.profile = webnotes.doc("Profile", context.post.assigned_to)
  55. elif context.view.name == "settings":
  56. context.profiles = webnotes.conn.sql("""select p.*, wsp.`read`, wsp.`write`, wsp.`admin`
  57. from `tabProfile` p, `tabWebsite Sitemap Permission` wsp
  58. where wsp.website_sitemap=%s and wsp.profile=p.name""", context.pathname, as_dict=True)
  59. elif context.view.name == "post":
  60. context.update(get_post_context(context))
  61. return context
  62. def guess_group_view(context):
  63. group = context.docname
  64. view = webnotes.form_dict.view or get_default_view(context.bean.doc.group_type)
  65. return group, view
  66. def get_default_view(group_type):
  67. for view, opts in get_views(group_type).iteritems():
  68. if opts.get("default"):
  69. return view
  70. def get_views(group_type=None):
  71. if group_type:
  72. group_views = webnotes._dict(views[group_type])
  73. else:
  74. group_views = {}
  75. for group_type in views:
  76. group_views.update(views[group_type].copy())
  77. group_views.update(common_views)
  78. if group_type == "Forum":
  79. group_views["post"]["upvote"] = True
  80. return group_views
  81. def has_access(access, view):
  82. if view=="settings":
  83. return access.get("admin")
  84. elif view in ("add", "edit"):
  85. return access.get("write")
  86. else:
  87. return access.get("read")
  88. def clear_cache(path=None, website_group=None):
  89. from webnotes.templates.website_group.post import clear_post_cache
  90. if path:
  91. website_groups = [webnotes.conn.get_value("Website Sitemap", path, "docname")]
  92. elif website_group:
  93. website_groups = [website_group]
  94. else:
  95. clear_post_cache()
  96. website_groups = webnotes.conn.sql_list("""select name from `tabWebsite Group`""")
  97. cache = webnotes.cache()
  98. all_views = get_views()
  99. for group in website_groups:
  100. for view in all_views:
  101. cache.delete_value("website_group_context:{}:{}".format(group, view))
  102. def clear_event_cache():
  103. for group in webnotes.conn.sql_list("""select name from `tabWebsite Group` where group_type='Event'"""):
  104. clear_unit_views(website_group=group)
  105. def clear_cache_on_bean_event(bean, method, *args, **kwargs):
  106. clear_cache(path=bean.doc.website_sitemap, website_group=bean.doc.website_group)
  107. def get_pathname(group):
  108. return webnotes.conn.get_value("Website Sitemap", {"ref_doctype": "Website Group",
  109. "docname": group})
  110. views = {
  111. "Forum": {
  112. "popular": {
  113. "name": "popular",
  114. "template_path": "templates/website_group/forum.html",
  115. "label": "Popular",
  116. "icon": "icon-heart",
  117. "default": True,
  118. "upvote": True,
  119. "idx": 1
  120. },
  121. "feed": {
  122. "name": "feed",
  123. "template_path": "templates/website_group/forum.html",
  124. "label": "Feed",
  125. "icon": "icon-rss",
  126. "upvote": True,
  127. "idx": 2
  128. }
  129. },
  130. "Tasks": {
  131. "open": {
  132. "name": "open",
  133. "template_path": "templates/website_group/forum.html",
  134. "label": "Open",
  135. "icon": "icon-inbox",
  136. "default": True,
  137. "upvote": True,
  138. "idx": 1
  139. },
  140. "closed": {
  141. "name": "closed",
  142. "template_path": "templates/website_group/forum.html",
  143. "label": "Closed",
  144. "icon": "icon-smile",
  145. "idx": 2
  146. }
  147. },
  148. "Events": {
  149. "upcoming": {
  150. "name": "upcoming",
  151. "template_path": "templates/website_group/forum.html",
  152. "label": "Upcoming",
  153. "icon": "icon-calendar",
  154. "default": True,
  155. "idx": 1
  156. },
  157. "past": {
  158. "name": "past",
  159. "template_path": "templates/website_group/forum.html",
  160. "label": "Past",
  161. "icon": "icon-time",
  162. "idx": 2
  163. }
  164. }
  165. }
  166. common_views = {
  167. "post": {
  168. "name": "post",
  169. "template_path": "templates/website_group/post.html",
  170. "label": "Post",
  171. "icon": "icon-comments",
  172. "hidden": True,
  173. "no_cache": True,
  174. "idx": 3
  175. },
  176. "edit": {
  177. "name": "edit",
  178. "template_path": "templates/website_group/edit_post.html",
  179. "label": "Edit Post",
  180. "icon": "icon-pencil",
  181. "hidden": True,
  182. "no_cache": True,
  183. "idx": 4
  184. },
  185. "add": {
  186. "name": "add",
  187. "template_path": "templates/website_group/edit_post.html",
  188. "label": "Add Post",
  189. "icon": "icon-plus",
  190. "hidden": True,
  191. "idx": 5
  192. },
  193. "settings": {
  194. "name": "settings",
  195. "template_path": "templates/website_group/settings.html",
  196. "label": "Settings",
  197. "icon": "icon-cog",
  198. "hidden": True,
  199. "idx": 6
  200. }
  201. }