|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- # Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
- # MIT License. See license.txt
-
- from __future__ import unicode_literals
- import webnotes
- from webnotes.utils import get_fullname
- from webnotes.webutils import get_access
- from webnotes.utils.file_manager import save_file
- from webnotes.templates.generators.website_group import get_pathname
-
- def get_post_context(context):
- post = webnotes.doc("Post", webnotes.form_dict.name)
- if post.parent_post:
- raise webnotes.PermissionError
-
- def _get_post_context():
- fullname = get_fullname(post.owner)
- return {
- "title": "{} by {}".format(post.title, fullname),
- "parent_post_html": get_parent_post_html(post, context),
- "post_list_html": get_child_posts_html(post, context),
- "parent_post": post.name
- }
-
- cache_key = "website_group_post:{}".format(post.name)
- return webnotes.cache().get_value(cache_key, lambda: _get_post_context())
-
- def get_parent_post_html(post, context):
- profile = webnotes.bean("Profile", post.owner).doc
- for fieldname in ("first_name", "last_name", "user_image", "location"):
- post.fields[fieldname] = profile.fields[fieldname]
-
- return webnotes.get_template("templates/includes/inline_post.html")\
- .render({"post": post.fields, "view": context.view})
-
- def get_child_posts_html(post, context):
- posts = webnotes.conn.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name
- from tabPost p, tabProfile pr
- where p.parent_post=%s and pr.name = p.owner
- order by p.creation asc""", (post.name,), as_dict=True)
-
- return webnotes.get_template("templates/includes/post_list.html")\
- .render({
- "posts": posts,
- "parent_post": post.name,
- "view": context.view
- })
-
- def clear_post_cache(post=None):
- cache = webnotes.cache()
- posts = [post] if post else webnotes.conn.sql_list("select name from `tabPost`")
-
- for post in posts:
- cache.delete_value("website_group_post:{}".format(post))
-
- @webnotes.whitelist(allow_guest=True)
- def add_post(group, content, picture, picture_name, title=None, parent_post=None,
- assigned_to=None, status=None, event_datetime=None):
-
- access = get_access(get_pathname(group))
- if not access.get("write"):
- raise webnotes.PermissionError
-
- if parent_post:
- if webnotes.conn.get_value("Post", parent_post, "parent_post"):
- webnotes.throw("Cannot reply to a reply")
-
- group = webnotes.doc("Website Group", group)
- post = webnotes.bean({
- "doctype":"Post",
- "title": (title or "").title(),
- "content": content,
- "website_group": group.name,
- "parent_post": parent_post or None
- })
-
- if not parent_post:
- if group.group_type == "Tasks":
- post.doc.is_task = 1
- post.doc.assigned_to = assigned_to
- elif group.group_type == "Events":
- post.doc.is_event = 1
- post.doc.event_datetime = event_datetime
-
- post.ignore_permissions = True
- post.insert()
-
- if picture_name and picture:
- process_picture(post, picture_name, picture)
-
- # send email
- if parent_post:
- post.run_method("send_email_on_reply")
-
- return post.doc.parent_post or post.doc.name
-
- @webnotes.whitelist(allow_guest=True)
- def save_post(post, content, picture=None, picture_name=None, title=None,
- assigned_to=None, status=None, event_datetime=None):
-
- post = webnotes.bean("Post", post)
- access = get_access(get_pathname(post.doc.website_group))
-
- if not access.get("write"):
- raise webnotes.PermissionError
-
- # TODO improve error message
- if webnotes.session.user != post.doc.owner:
- for fieldname in ("title", "content"):
- if post.doc.fields.get(fieldname) != locals().get(fieldname):
- webnotes.throw("You cannot change: {}".format(fieldname.title()))
-
- if picture and picture_name:
- webnotes.throw("You cannot change: Picture")
-
- post.doc.fields.update({
- "title": (title or "").title(),
- "content": content,
- "assigned_to": assigned_to,
- "status": status,
- "event_datetime": event_datetime
- })
- post.ignore_permissions = True
- post.save()
-
- if picture_name and picture:
- process_picture(post, picture_name, picture)
-
- return post.doc.parent_post or post.doc.name
-
- def process_picture(post, picture_name, picture):
- from webnotes.templates.generators.website_group import clear_cache
-
- file_data = save_file(picture_name, picture, "Post", post.doc.name, decode=True)
- post.doc.picture_url = file_data.file_name or file_data.file_url
- webnotes.conn.set_value("Post", post.doc.name, "picture_url", post.doc.picture_url)
- clear_cache(website_group=post.doc.website_group)
-
- @webnotes.whitelist()
- def suggest_user(group, term):
- """suggest a user that has read permission in this group tree"""
- profiles = webnotes.conn.sql("""select
- pr.name, pr.first_name, pr.last_name,
- pr.user_image, pr.location
- from `tabProfile` pr
- where (pr.first_name like %(term)s or pr.last_name like %(term)s)
- and pr.user_type = 'Website User' and pr.enabled=1""",
- {"term": "%{}%".format(term), "group": group}, as_dict=True)
-
- template = webnotes.get_template("templates/includes/profile_display.html")
- return [{
- "value": "{} {}".format(pr.first_name or "", pr.last_name or "").strip(),
- "profile_html": template.render({"profile": pr}),
- "profile": pr.name
- } for pr in profiles]
|