Bläddra i källkod

Cleanup of Website Group after nested URLs

version-14
Anand Doshi 11 år sedan
förälder
incheckning
586674cb0b
28 ändrade filer med 446 tillägg och 685 borttagningar
  1. +1
    -5
      webnotes/core/doctype/profile/profile.py
  2. +5
    -4
      webnotes/hooks.txt
  3. +2
    -2
      webnotes/templates/emails/standard.html
  4. +9
    -2
      webnotes/templates/generators/website_group.html
  5. +169
    -57
      webnotes/templates/generators/website_group.py
  6. +1
    -1
      webnotes/templates/includes/inline_post.html
  7. +1
    -1
      webnotes/templates/includes/post_editor.html
  8. +1
    -1
      webnotes/templates/includes/profile_display.html
  9. +10
    -0
      webnotes/templates/pages/login.py
  10. +1
    -1
      webnotes/templates/website_group/edit_post.html
  11. +0
    -29
      webnotes/templates/website_group/events.html
  12. +0
    -125
      webnotes/templates/website_group/events.py
  13. +11
    -13
      webnotes/templates/website_group/forum.html
  14. +39
    -98
      webnotes/templates/website_group/forum.py
  15. +1
    -2
      webnotes/templates/website_group/post.html
  16. +112
    -9
      webnotes/templates/website_group/post.py
  17. +23
    -26
      webnotes/templates/website_group/settings.py
  18. +0
    -32
      webnotes/templates/website_group/tasks.html
  19. +0
    -126
      webnotes/templates/website_group/tasks.py
  20. +0
    -102
      webnotes/website/doctype/post/post.py
  21. +4
    -3
      webnotes/website/doctype/user_vote/user_vote.py
  22. +10
    -3
      webnotes/website/doctype/website_group/website_group.py
  23. +1
    -1
      webnotes/website/doctype/website_settings/website_settings.py
  24. +2
    -1
      webnotes/website/doctype/website_sitemap_permission/website_sitemap_permission.txt
  25. +1
    -1
      webnotes/website/js/website.js
  26. +37
    -31
      webnotes/website/js/website_group.js
  27. +5
    -0
      webnotes/website/page/website_home/website_home.js
  28. +0
    -9
      webnotes/webutils.py

+ 1
- 5
webnotes/core/doctype/profile/profile.py Visa fil

@@ -385,12 +385,8 @@ def facebook_login(data):
"new_password": webnotes.generate_hash(data["email"]),
"fb_username": data["username"],
"fb_userid": data["id"],
"fb_location": data.get("location", {}).get("name"),
"fb_hometown": data.get("hometown", {}).get("name"),
"fb_age_range": data.get("age_range") and "{min}-{max}".format(**data.get("age_range")),
"location": data.get("location", {}).get("name"),
"birth_date": data.get("birthday"),
"fb_bio": data.get("bio"),
"fb_education": data.get("education") and data.get("education")[-1].get("type"),
"user_type": "Website User"
})
profile.ignore_permissions = True


+ 5
- 4
webnotes/hooks.txt Visa fil

@@ -20,10 +20,6 @@ web_include_css = style_settings.css

website_clear_cache = webnotes.templates.generators.website_group.clear_cache

website_group_handler:Forum = webnotes.templates.website_group.forum
website_group_handler:Events = webnotes.templates.website_group.events
website_group_handler:Tasks = webnotes.templates.website_group.tasks

get_desktop_icons = webnotes.manage.get_desktop_icons
notification_config = webnotes.core.notifications.get_notification_config

@@ -42,3 +38,8 @@ has_permission:Event = webnotes.core.doctype.event.event.has_permission

permission_query_conditions:ToDo = webnotes.core.doctype.todo.todo.get_permission_query_conditions
has_permission:ToDo = webnotes.core.doctype.todo.todo.has_permission

# bean

bean_event:User Vote:after_insert = webnotes.templates.generators.website_group.clear_cache_on_bean_event
bean_event:Website Sitemap Permission:on_update = webnotes.templates.generators.website_group.clear_cache_on_bean_event

+ 2
- 2
webnotes/templates/emails/standard.html Visa fil

@@ -38,7 +38,7 @@ body {

.btn-primary{
text-decoration:none;
color: #FFF;
color: #FFF !important;
background-color: #348eda;
border:solid #348eda;
border-width:10px 20px;
@@ -53,7 +53,7 @@ body {

.btn-secondary {
text-decoration:none;
color: #FFF;
color: #FFF !important;
background-color: #aaa;
border:solid #aaa;
border-width:10px 20px;


+ 9
- 2
webnotes/templates/generators/website_group.html Visa fil

@@ -12,9 +12,10 @@
{% block content %}
<ul class="nav nav-tabs view-selector">
{%- for t in views -%}
{% set url = (pathname if t.default else "{}?view={}".format(pathname, t.name)) %}
<li class="{% if view.name==t.name -%} active {%- endif %} {% if t.hidden -%} hide {%- endif %}"
data-view="{{ t.name }}">
<a href="{{ t.url or '' }}"><i class="{{ t.icon }}"></i>
<a href="{{ url or '' }}"><i class="{{ t.icon }}"></i>
<span class="nav-label">{{ t.label }}</span></a>
</li>
{%- endfor -%}
@@ -26,11 +27,17 @@
{%- endif -%}
website.group = "{{ group.name }}";
website.view = "{{ view.name }}";
website.pathname = "{{ pathname }}";
website.upvote = {{ 1 if view.upvote else 0 }};
{% if view.upvote %}
website.setup_upvote();
{% endif %}
</script>

{% include view.template_path %}

<script>$(function() { website.toggle_upvote(); });</script>

{% endblock %}

{% block sidebar %}{% include "templates/includes/sidebar.html" %}{% endblock %}

+ 169
- 57
webnotes/templates/generators/website_group.py Visa fil

@@ -3,23 +3,19 @@

import webnotes
from webnotes.webutils import get_access, can_cache
from webnotes.templates.website_group.post import clear_post_cache
from webnotes.templates.website_group.forum import get_post_list_html

doctype = "Website Group"
no_cache = 1

def get_context(context):
bean = context.bean
group, view = guess_group_view(bean, context)
group, view = guess_group_view(context)
try:
if not has_access(context.access, view):
raise webnotes.PermissionError
group_context = get_group_context(group, view, bean, context)
group_context.update(context)
return group_context
return get_group_context(group, view, context)
except webnotes.DoesNotExistError:
return {
@@ -32,66 +28,85 @@ def get_context(context):
'You are not permitted to view this page.</div>'
}
def get_group_context(group, view, bean, context):
def get_group_context(group, view, context):
cache_key = "website_group_context:{}:{}".format(group, view)
views = get_views(bean.doc.group_type)

views = get_views(context.bean.doc.group_type)
view = webnotes._dict(views.get(view))
if can_cache(view.get("no_cache")):
if can_cache(view.no_cache):
group_context = webnotes.cache().get_value(cache_key)
if group_context:
return group_context
group_context = build_group_context(group, view, bean, views, context)
group_context = build_group_context(group, view, views, context)
if can_cache(view.get("no_cache")):
webnotes.cache().set_value(cache_key, group_context)
return group_context
def build_group_context(group, view, bean, views, context):
title = "{} - {}".format(bean.doc.group_title, view.get("label"))
for name, opts in views.iteritems():
opts["url"] = opts["url"].format(pathname=context.pathname, post="")
def build_group_context(group, view, views, context):
title = "{} - {}".format(context.bean.doc.group_title, view.get("label"))
group_context = webnotes._dict({
"group": bean.doc.fields,
"group": context.bean.doc.fields,
"view": view,
"views": (v[1] for v in sorted(views.iteritems(), key=lambda (k, v): v.get("idx"))),
"title": title
"views": [v[1] for v in sorted(views.iteritems(), key=lambda (k, v): v.get("idx"))],
"title": title,
"pathname": context.pathname
})
handler = get_handler(bean.doc.group_type)
if handler:
group_context.update(handler.get_context(group_context))
group_context.update(build_view_context(group_context))
return group_context

def guess_group_view(bean, context):
group = context.docname
view = webnotes.form_dict.view
if not view:
for v, opts in get_views(bean.doc.group_type).iteritems():
if opts.get("default"):
view = v
break
def build_view_context(context):
from webnotes.templates.website_group.post import get_post_context
if context.view.name in ("popular", "feed", "open", "closed", "upcoming", "past"):
context.post_list_html = get_post_list_html(context.group.name, context.view.name)
elif context.view.name == "edit":
context.post = webnotes.doc("Post", webnotes.form_dict.name).fields
if context.post.assigned_to:
context.profile = webnotes.doc("Profile", context.post.assigned_to)

elif context.view.name == "settings":
context.profiles = webnotes.conn.sql("""select p.*, wsp.`read`, wsp.`write`, wsp.`admin`
from `tabProfile` p, `tabWebsite Sitemap Permission` wsp
where wsp.website_sitemap=%s and wsp.profile=p.name""", context.pathname, as_dict=True)
elif context.view.name == "post":
context.update(get_post_context(context))
return context
def guess_group_view(context):
group = context.docname
view = webnotes.form_dict.view or get_default_view(context.bean.doc.group_type)
return group, view
def get_handler(group_type):
handler = webnotes.get_hooks("website_group_handler:{}".format(group_type))
if handler:
return webnotes.get_module(handler[0])
def get_default_view(group_type):
for view, opts in get_views(group_type).iteritems():
if opts.get("default"):
return view
def get_views(group_type=None):
if group_type:
group_views = webnotes._dict(views[group_type])
else:
group_views = {}
for group_type in views:
group_views.update(views[group_type].copy())
group_views.update(common_views)
def get_views(group_type):
from copy import deepcopy
handler = get_handler(group_type)
if handler and hasattr(handler, "get_views"):
return deepcopy(handler.get_views() or {})
return {}
if group_type == "Forum":
group_views["post"]["upvote"] = True
return group_views
def has_access(access, view):
if view=="settings":
return access.get("admin")
@@ -100,26 +115,123 @@ def has_access(access, view):
else:
return access.get("read")
def clear_cache(page_name=None, website_group=None):
if page_name or website_group:
filters = {"page_name": page_name} if page_name else website_group

website_group = webnotes.conn.get_value("Website Group", filters,
["page_name", "group_type"], as_dict=True)

if not website_group:
return

def clear_cache(path=None, website_group=None):
from webnotes.templates.website_group.post import clear_post_cache
if path:
website_groups = [webnotes.conn.get_value("Website Sitemap", path, "docname")]
elif website_group:
website_groups = [website_group]
else:
clear_post_cache()
website_groups = webnotes.conn.sql("""select page_name, group_type from `tabWebsite Group`""", as_dict=True)
website_groups = webnotes.conn.sql_list("""select name from `tabWebsite Group`""")
cache = webnotes.cache()
all_views = get_views()
for group in website_groups:
for view in get_views(group.group_type):
cache.delete_value("website_group_context:{}:{}".format(group.page_name, view))
for view in all_views:
cache.delete_value("website_group_context:{}:{}".format(group, view))

def clear_event_cache():
for group in webnotes.conn.sql_list("""select name from `tabWebsite Group` where group_type='Event'"""):
clear_unit_views(website_group=group)
clear_unit_views(website_group=group)
def clear_cache_on_bean_event(bean, method, *args, **kwargs):
clear_cache(path=bean.doc.website_sitemap, website_group=bean.doc.website_group)
def get_pathname(group):
return webnotes.conn.get_value("Website Sitemap", {"ref_doctype": "Website Group",
"docname": group})

views = {
"Forum": {
"popular": {
"name": "popular",
"template_path": "templates/website_group/forum.html",
"label": "Popular",
"icon": "icon-heart",
"default": True,
"upvote": True,
"idx": 1
},
"feed": {
"name": "feed",
"template_path": "templates/website_group/forum.html",
"label": "Feed",
"icon": "icon-rss",
"upvote": True,
"idx": 2
}
},
"Tasks": {
"open": {
"name": "open",
"template_path": "templates/website_group/forum.html",
"label": "Open",
"icon": "icon-inbox",
"default": True,
"upvote": True,
"idx": 1
},
"closed": {
"name": "closed",
"template_path": "templates/website_group/forum.html",
"label": "Closed",
"icon": "icon-smile",
"idx": 2
}
},
"Events": {
"upcoming": {
"name": "upcoming",
"template_path": "templates/website_group/forum.html",
"label": "Upcoming",
"icon": "icon-calendar",
"default": True,
"idx": 1
},
"past": {
"name": "past",
"template_path": "templates/website_group/forum.html",
"label": "Past",
"icon": "icon-time",
"idx": 2
}
}
}

common_views = {
"post": {
"name": "post",
"template_path": "templates/website_group/post.html",
"label": "Post",
"icon": "icon-comments",
"hidden": True,
"no_cache": True,
"idx": 3
},
"edit": {
"name": "edit",
"template_path": "templates/website_group/edit_post.html",
"label": "Edit Post",
"icon": "icon-pencil",
"hidden": True,
"no_cache": True,
"idx": 4
},
"add": {
"name": "add",
"template_path": "templates/website_group/edit_post.html",
"label": "Add Post",
"icon": "icon-plus",
"hidden": True,
"idx": 5
},
"settings": {
"name": "settings",
"template_path": "templates/website_group/settings.html",
"label": "Settings",
"icon": "icon-cog",
"hidden": True,
"idx": 6
}
}

+ 1
- 1
webnotes/templates/includes/inline_post.html Visa fil

@@ -20,7 +20,7 @@
</h4>
{%- endif -%}
<ul class="list-inline small text-muted post-options">
{% if view and view.upvote %}<li class="upvote">
{% if view and view.upvote and not post.parent_post %}<li class="upvote">
<a><span class="upvote-count {% if not post.upvotes %}hide{% endif %}">{{ post.upvotes }}</span>
<i class="icon-thumbs-up"></i></a></li>{% endif %}
{%- if not post.parent_post and view.name != "post" -%}


+ 1
- 1
webnotes/templates/includes/post_editor.html Visa fil

@@ -32,7 +32,7 @@
</div>
</div>
</div>
<div class="form-group task-status {% if not (post and post.assigned_to) %}hide{% endif %}">
<div class="form-group task-status {% if not post %}hide{% endif %}">
<label>Status</label>
<select class="form-control" data-fieldname="status">
{% for opt in ("Open", "Closed") %}


+ 1
- 1
webnotes/templates/includes/profile_display.html Visa fil

@@ -4,6 +4,6 @@
</div>
<div class="media-body">
<div>{{ profile.first_name or "" }} {{ profile.last_name or "" }}</div>
<div class="text-muted"><small>{{ profile.fb_location or profile.fb_hometown or "" }}</small></div>
<div class="text-muted"><small>{{ profile.location or "" }}</small></div>
</div>
</div>

+ 10
- 0
webnotes/templates/pages/login.py Visa fil

@@ -0,0 +1,10 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt

from __future__ import unicode_literals
import webnotes

def get_context(context):
# get settings from site config
if webnotes.conf.get("fb_app_id"):
return { "fb_app_id": webnotes.conf.fb_app_id }

+ 1
- 1
webnotes/templates/website_group/edit_post.html Visa fil

@@ -1,7 +1,7 @@
{% include "templates/includes/post_editor.html" %}

<script type="text/javascript" src="/assets/js/canvasResize.min.js"></script>
<script>
wn.require("/assets/js/canvasResize.min.js");
$(function() {
website.bind_add_post();


+ 0
- 29
webnotes/templates/website_group/events.html Visa fil

@@ -1,29 +0,0 @@
<div class="small text-muted post-list-help"></div>
<div class="post-list">
{{ post_list_html }}
</div>
<div class="text-center">
<button class="btn btn-default btn-more hide">More</button>
</div>

<script>
$(function() {
if($(".post").length===20) {
wn.setup_pagination($(".btn-more"), {
args: {
cmd: "webnotes.templates.website_group.events.get_post_list_html",
limit_start: $(".post").length,
limit_length: 20,
group: website.group,
view: website.view
},
$wrapper: $(".post-list")
});
}
website.toggle_edit();
website.setup_upvote();
website.toggle_upvote();
website.format_event_timestamps();
});
</script>

+ 0
- 125
webnotes/templates/website_group/events.py Visa fil

@@ -1,125 +0,0 @@
# 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 now_datetime, get_datetime_str
from webnotes.webutils import get_access
from webnotes.templates.website_group.settings import get_settings_context
from webnotes.templates.website_group.post import get_post_context

def get_views():
return views
def get_context(group_context):
events_context = {}
if group_context.view.name in ("upcoming", "past"):
events_context["post_list_html"] = get_post_list_html(group_context["group"]["name"], group_context["view"])
elif group_context.view.name == "edit":
events_context["session_user"] = webnotes.session.user
events_context["post"] = webnotes.doc("Post", webnotes.form_dict.name).fields

elif group_context.view.name == "settings":
events_context.update(get_settings_context(group_context))
elif group_context.view.name == "post":
events_context.update(get_post_context(group_context))
return events_context
@webnotes.whitelist(allow_guest=True)
def get_post_list_html(group, view, limit_start=0, limit_length=20):
access = get_access(group)
if isinstance(view, basestring):
view = get_views()[view]
view = webnotes._dict(view)
# verify permission for paging
if webnotes.local.form_dict.cmd == "get_post_list_html":
if not access.get("read"):
return webnotes.PermissionError
if view.name=="upcoming":
condition = "and p.event_datetime >= %s"
order_by = "p.event_datetime asc"
else:
condition = "and p.event_datetime < %s"
order_by = "p.event_datetime desc"
# should show based on time upto precision of hour
# because the current hour should also be in upcoming
now = now_datetime().replace(minute=0, second=0, microsecond=0)
posts = webnotes.conn.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name,
(select count(pc.name) from `tabPost` pc where pc.parent_post=p.name) as post_reply_count
from `tabPost` p, `tabProfile` pr
where p.website_group = %s and pr.name = p.owner and ifnull(p.parent_post, '')=''
and p.is_event=1 {condition}
order by {order_by} limit %s, %s""".format(condition=condition, order_by=order_by),
(group, now, int(limit_start), int(limit_length)), as_dict=True)
context = {"posts": posts, "limit_start": limit_start, "view": view}
return webnotes.get_template("templates/includes/post_list.html").render(context)
views = {
"upcoming": {
"name": "upcoming",
"template_path": "templates/website_group/events.html",
"url": "/{group}",
"label": "Upcoming",
"icon": "icon-calendar",
"default": True,
"idx": 1
},
"past": {
"name": "past",
"template_path": "templates/website_group/events.html",
"url": "/{group}?view=past",
"label": "Past",
"icon": "icon-time",
"idx": 2
},
"post": {
"name": "post",
"template_path": "templates/website_group/post.html",
"url": "/{group}?view=post&name={post}",
"label": "Post",
"icon": "icon-comments",
"hidden": True,
"no_cache": True,
"idx": 3
},
"edit": {
"name": "edit",
"template_path": "templates/website_group/edit_post.html",
"url": "/{group}?view=edit&name={post}",
"label": "Edit Post",
"icon": "icon-pencil",
"hidden": True,
"no_cache": True,
"idx": 4
},
"add": {
"name": "add",
"template_path": "templates/website_group/edit_post.html",
"url": "/{group}?view=add",
"label": "Add Post",
"icon": "icon-plus",
"hidden": True,
"idx": 5
},
"settings": {
"name": "settings",
"template_path": "templates/website_group/settings.html",
"url": "/{group}?view=settings",
"label": "Settings",
"icon": "icon-cog",
"hidden": True,
"idx": 6
}
}

+ 11
- 13
webnotes/templates/website_group/forum.html Visa fil

@@ -9,21 +9,19 @@
<script>
$(function() {
if($(".post").length===20) {
wn.setup_pagination($(".btn-more"), {
args: {
cmd: "webnotes.templates.website_group.forum.get_post_list_html",
limit_start: $(".post").length,
limit_length: 20,
group: website.group,
view: website.view,
pathname: website.pathname
},
$wrapper: $(".post-list")
});
wn.setup_pagination();
}
{% if group.group_type == "Forum" -%}
website.toggle_edit(true);
website.setup_upvote();
website.toggle_upvote();

{% elif group.group_type == "Tasks" %}
website.toggle_edit();

{% elif group.group_type == "Events" %}
website.toggle_edit();
website.format_event_timestamps();

{%- endif %}
});
</script>

+ 39
- 98
webnotes/templates/website_group/forum.py Visa fil

@@ -5,120 +5,61 @@ from __future__ import unicode_literals
import webnotes
from webnotes.utils import now_datetime, get_datetime_str
from webnotes.webutils import get_access
from webnotes.templates.website_group.settings import get_settings_context
from webnotes.templates.website_group.post import get_post_context

def get_views():
return views
def get_context(group_context):
forum_context = {}
if group_context.view.name in ("popular", "feed"):
forum_context["post_list_html"] = get_post_list_html(group_context["group"]["name"], group_context["view"], group_context.pathname)
elif group_context.view.name == "edit":
forum_context["session_user"] = webnotes.session.user
forum_context["post"] = webnotes.doc("Post", webnotes.form_dict.name).fields

elif group_context.view.name == "settings":
forum_context.update(get_settings_context(group_context))
elif group_context.view.name == "post":
forum_context.update(get_post_context(group_context))
return forum_context

@webnotes.whitelist(allow_guest=True)
def get_post_list_html(group, view, pathname, limit_start=0, limit_length=20):
print pathname
access = get_access(pathname)
if isinstance(view, basestring):
view = get_views()[view]
view = webnotes._dict(view)
def get_post_list_html(group, view, limit_start=0, limit_length=20):
from webnotes.templates.generators.website_group import get_views
# verify permission for paging
if webnotes.local.form_dict.cmd == "get_post_list_html":
pathname = webnotes.conn.get_value("Website Sitemap",
{"ref_doctype": "Website Group", "docname": group})
access = get_access(pathname)
if not access.get("read"):
return webnotes.PermissionError
if view.name == "feed":
conditions = ""
values = [group]
group_type = webnotes.conn.get_value("Website Group", group, "group_type")
if group_type == "Events":
# should show based on time upto precision of hour
# because the current hour should also be in upcoming
values.append(now_datetime().replace(minute=0, second=0, microsecond=0))
if view in ("feed", "closed"):
order_by = "p.creation desc"
else:
if view == "closed":
conditions += " and p.is_task=1 and p.status='Closed'"
elif view in ("popular", "open"):
now = get_datetime_str(now_datetime())
order_by = """(p.upvotes + post_reply_count - (timestampdiff(hour, p.creation, \"{}\") / 2)) desc,
p.creation desc""".format(now)
if view == "open":
conditions += " and p.is_task=1 and p.status='Open'"
elif view == "upcoming":
conditions += " and p.is_event=1 and p.event_datetime >= %s"
order_by = "p.event_datetime asc"
elif view == "past":
conditions += " and p.is_event=1 and p.event_datetime < %s"
order_by = "p.event_datetime desc"
values += [int(limit_start), int(limit_length)]
posts = webnotes.conn.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name,
(select count(pc.name) from `tabPost` pc where pc.parent_post=p.name) as post_reply_count
from `tabPost` p, `tabProfile` pr
where p.website_group = %s and pr.name = p.owner and ifnull(p.parent_post, '')=''
order by {order_by} limit %s, %s""".format(order_by=order_by),
(group, int(limit_start), int(limit_length)), as_dict=True)
context = {"posts": posts, "limit_start": limit_start, "view": view}
where p.website_group = %s and pr.name = p.owner and ifnull(p.parent_post, '')=''
{conditions} order by {order_by} limit %s, %s""".format(conditions=conditions, order_by=order_by),
tuple(values), as_dict=True, debug=True)
context = { "posts": posts, "limit_start": limit_start, "view": get_views(group_type)[view] }
return webnotes.get_template("templates/includes/post_list.html").render(context)
views = {
"popular": {
"name": "popular",
"template_path": "templates/website_group/forum.html",
"url": "{pathname}",
"label": "Popular",
"icon": "icon-heart",
"default": True,
"upvote": True,
"idx": 1
},
"feed": {
"name": "feed",
"template_path": "templates/website_group/forum.html",
"url": "/{pathname}?view=feed",
"label": "Feed",
"icon": "icon-rss",
"upvote": True,
"idx": 2
},
"post": {
"name": "post",
"template_path": "templates/website_group/post.html",
"url": "/{pathname}?view=post&name={post}",
"label": "Post",
"icon": "icon-comments",
"upvote": True,
"hidden": True,
"no_cache": True,
"idx": 3
},
"edit": {
"name": "edit",
"template_path": "templates/website_group/edit_post.html",
"url": "/{pathname}?view=edit&name={post}",
"label": "Edit Post",
"icon": "icon-pencil",
"hidden": True,
"no_cache": True,
"idx": 4
},
"add": {
"name": "add",
"template_path": "templates/website_group/edit_post.html",
"url": "/{pathname}?view=add",
"label": "Add Post",
"icon": "icon-plus",
"hidden": True,
"idx": 5
},
"settings": {
"name": "settings",
"template_path": "templates/website_group/settings.html",
"url": "/{pathname}?view=settings",
"label": "Settings",
"icon": "icon-cog",
"hidden": True,
"idx": 6
}
}

+ 1
- 2
webnotes/templates/website_group/post.html Visa fil

@@ -12,11 +12,10 @@
{% include "templates/includes/post_editor.html" %}
</div>

<script type="text/javascript" src="/assets/js/canvasResize.min.js"></script>
<script>
wn.require("/assets/js/canvasResize.min.js");
$(function() {
website.toggle_edit(true);
website.setup_upvote();
website.toggle_upvote();
website.bind_add_post();


+ 112
- 9
webnotes/templates/website_group/post.py Visa fil

@@ -4,8 +4,11 @@
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(group_context):
def get_post_context(context):
post = webnotes.doc("Post", webnotes.form_dict.name)
if post.parent_post:
raise webnotes.PermissionError
@@ -14,24 +17,23 @@ def get_post_context(group_context):
fullname = get_fullname(post.owner)
return {
"title": "{} by {}".format(post.title, fullname),
# "group_title": group_context.get("unit_title") + " by {}".format(fullname),
"parent_post_html": get_parent_post_html(post, group_context.get("view")),
"post_list_html": get_child_posts_html(post, group_context.get("view")),
"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, view):
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": view})
.render({"post": post.fields, "view": context.view})

def get_child_posts_html(post, 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
@@ -41,7 +43,7 @@ def get_child_posts_html(post, view):
.render({
"posts": posts,
"parent_post": post.name,
"view": view
"view": context.view
})
def clear_post_cache(post=None):
@@ -49,4 +51,105 @@ def clear_post_cache(post=None):
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))
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]

+ 23
- 26
webnotes/templates/website_group/settings.py Visa fil

@@ -3,46 +3,42 @@

from __future__ import unicode_literals
import webnotes
from webnotes.webutils import get_access
from webnotes.website.doctype.website_sitemap_permission.website_sitemap_permission import clear_permissions
from webnotes.webutils import get_access, clear_permissions
from webnotes.templates.generators.website_group import get_pathname
from webnotes.utils.email_lib.bulk import send

def get_settings_context(group_context):
if not get_access(group_context.group.name).get("admin"):
raise webnotes.PermissionError
return {
"profiles": webnotes.conn.sql("""select p.*, wsp.`read`, wsp.`write`, wsp.`admin`
from `tabProfile` p, `tabWebsite Sitemap Permission` wsp
where wsp.website_sitemap=%s and wsp.profile=p.name""", (group_context.group.name,), as_dict=True)
}
@webnotes.whitelist()
def suggest_user(term, group):
pathname = get_pathname(group)
if not get_access(pathname).get("admin"):
raise webnotes.PermissionError
profiles = webnotes.conn.sql("""select pr.name, pr.first_name, pr.last_name,
pr.user_image, pr.fb_location, pr.fb_hometown
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.user_image is not null and pr.enabled=1
and not exists(select wsp.name from `tabWebsite Sitemap Permission` wsp
where wsp.website_sitemap=%(group)s and wsp.profile=pr.name)""",
{"term": "%{}%".format(term), "group": group}, as_dict=True)
{"term": "%{}%".format(term), "group": pathname}, as_dict=True)
template = webnotes.get_template("templates/includes/profile_display.html")
return [{
"value": "{} {}".format(pr.first_name, pr.last_name),
"value": "{} {}".format(pr.first_name or "", pr.last_name or ""),
"profile_html": template.render({"profile": pr}),
"profile": pr.name
} for pr in profiles]

@webnotes.whitelist()
def add_sitemap_permission(sitemap_page, profile):
if not get_access(sitemap_page).get("admin"):
def add_sitemap_permission(group, profile):
pathname = get_pathname(group)
if not get_access(pathname).get("admin"):
raise webnotes.PermissionError
permission = webnotes.bean({
"doctype": "Website Sitemap Permission",
"website_sitemap": sitemap_page,
"website_sitemap": pathname,
"profile": profile,
"read": 1
})
@@ -50,24 +46,25 @@ def add_sitemap_permission(sitemap_page, profile):
profile = permission.doc.fields
profile.update(webnotes.conn.get_value("Profile", profile.profile,
["name", "first_name", "last_name", "user_image", "fb_location", "fb_hometown"], as_dict=True))
["name", "first_name", "last_name", "user_image", "location"], as_dict=True))
return webnotes.get_template("templates/includes/sitemap_permission.html").render({
"profile": profile
})

@webnotes.whitelist()
def update_permission(sitemap_page, profile, perm, value):
if not get_access(sitemap_page).get("admin"):
def update_permission(group, profile, perm, value):
pathname = get_pathname(group)
if not get_access(pathname).get("admin"):
raise webnotes.PermissionError
permission = webnotes.bean("Website Sitemap Permission", {"website_sitemap": sitemap_page, "profile": profile})
permission = webnotes.bean("Website Sitemap Permission", {"website_sitemap": pathname, "profile": profile})
permission.doc.fields[perm] = int(value)
permission.save(ignore_permissions=True)
# send email
if perm=="admin" and int(value):
group_title = webnotes.conn.get_value("Website Sitemap", sitemap_page, "page_title")
group_title = webnotes.conn.get_value("Website Sitemap", pathname, "page_title")
subject = "You have been made Administrator of Group " + group_title
@@ -79,7 +76,7 @@ def update_permission(sitemap_page, profile, perm, value):

@webnotes.whitelist()
def update_description(group, description):
if not get_access(group).get("admin"):
if not get_access(get_pathname(group)).get("admin"):
raise webnotes.PermissionError

group = webnotes.bean("Website Group", group)
@@ -88,7 +85,7 @@ def update_description(group, description):
@webnotes.whitelist()
def add_website_group(group, new_group, public_read, public_write, group_type="Forum"):
if not get_access(group).get("admin"):
if not get_access(get_pathname(group)).get("admin"):
raise webnotes.PermissionError
parent_website_sitemap = webnotes.conn.get_value("Website Sitemap",


+ 0
- 32
webnotes/templates/website_group/tasks.html Visa fil

@@ -1,32 +0,0 @@
<div class="small text-muted post-list-help"></div>
<div class="post-list">
{{ post_list_html }}
</div>
<div class="text-center">
<button class="btn btn-default btn-more hide">More</button>
</div>

<script>
$(function() {
if($(".post").length===20) {
wn.setup_pagination($(".btn-more"), {
args: {
cmd: "webnotes.templates.website_group.tasks.get_post_list_html",
limit_start: $(".post").length,
limit_length: 20,
group: website.group,
view: website.view,
status: "Closed" ? view=="closed" : undefined
},
$wrapper: $(".post-list")
});
}
{%- if view.name == "open" -%}
website.setup_upvote();
website.toggle_upvote();
{%- endif -%}

website.toggle_edit();
});
</script>

+ 0
- 126
webnotes/templates/website_group/tasks.py Visa fil

@@ -1,126 +0,0 @@
# 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 now_datetime, get_datetime_str
from webnotes.webutils import get_access
from webnotes.templates.website_group.settings import get_settings_context
from webnotes.templates.website_group.post import get_post_context

def get_views():
return views
def get_context(group_context):
tasks_context = {}
if group_context.view.name in ("open", "closed"):
tasks_context["post_list_html"] = get_post_list_html(group_context["group"]["name"], group_context["view"])
elif group_context.view.name == "edit":
post = webnotes.doc("Post", webnotes.form_dict.name).fields
tasks_context["session_user"] = webnotes.session.user
tasks_context["post"] = post
if post.assigned_to:
tasks_context["profile"] = webnotes.doc("Profile", post.assigned_to)

elif group_context.view.name == "settings":
tasks_context.update(get_settings_context(group_context))
elif group_context.view.name == "post":
tasks_context.update(get_post_context(group_context))
return tasks_context
@webnotes.whitelist(allow_guest=True)
def get_post_list_html(group, view, limit_start=0, limit_length=20, status="Open"):
access = get_access(group)
if isinstance(view, basestring):
view = get_views()[view]
view = webnotes._dict(view)
# verify permission for paging
if webnotes.local.form_dict.cmd == "get_post_list_html":
if not access.get("read"):
return webnotes.PermissionError
if view.name=="open":
now = get_datetime_str(now_datetime())
order_by = "(p.upvotes + post_reply_count - (timestampdiff(hour, p.creation, \"{}\") / 2)) desc, p.creation desc".format(now)
else:
status = "Closed"
order_by = "p.creation desc"
posts = webnotes.conn.sql("""select p.*, pr.user_image, pr.first_name, pr.last_name,
(select count(pc.name) from `tabPost` pc where pc.parent_post=p.name) as post_reply_count
from `tabPost` p, `tabProfile` pr
where p.website_group = %s and pr.name = p.owner and ifnull(p.parent_post, '')=''
and p.is_task=1 and p.status=%s
order by {order_by} limit %s, %s""".format(order_by=order_by),
(group, status, int(limit_start), int(limit_length)), as_dict=True)
context = {"posts": posts, "limit_start": limit_start, "view": view}
return webnotes.get_template("templates/includes/post_list.html").render(context)
views = {
"open": {
"name": "open",
"template_path": "templates/website_group/tasks.html",
"url": "/{group}",
"label": "Open",
"icon": "icon-inbox",
"default": True,
"upvote": True,
"idx": 1
},
"closed": {
"name": "closed",
"template_path": "templates/website_group/tasks.html",
"url": "/{group}?view=closed",
"label": "Closed",
"icon": "icon-smile",
"idx": 2
},
"post": {
"name": "post",
"template_path": "templates/website_group/post.html",
"url": "/{group}?view=post&name={post}",
"label": "Post",
"icon": "icon-comments",
"hidden": True,
"no_cache": True,
"upvote": True,
"idx": 3
},
"edit": {
"name": "edit",
"template_path": "templates/website_group/edit_post.html",
"url": "/{group}?view=edit&name={post}",
"label": "Edit Post",
"icon": "icon-pencil",
"hidden": True,
"no_cache": True,
"idx": 4
},
"add": {
"name": "add",
"template_path": "templates/website_group/edit_post.html",
"url": "/{group}?view=add",
"label": "Add Post",
"icon": "icon-plus",
"hidden": True,
"idx": 5
},
"settings": {
"name": "settings",
"template_path": "templates/website_group/settings.html",
"url": "/{group}?view=settings",
"label": "Settings",
"icon": "icon-cog",
"hidden": True,
"idx": 6
}
}

+ 0
- 102
webnotes/website/doctype/post/post.py Visa fil

@@ -9,9 +9,6 @@ import webnotes
from webnotes.utils import get_fullname
from webnotes.utils.email_lib.bulk import send
from webnotes.utils.email_lib import sendmail
from webnotes.utils.file_manager import save_file

from webnotes.webutils import get_access
from webnotes.templates.generators.website_group import clear_cache
from webnotes.templates.website_group.post import clear_post_cache

@@ -99,102 +96,3 @@ class DocType:
message += "<p><a href='/post/{post_name}'>Click here to view the post</a></p>".format(fullname=owner_fullname,
post_name=post_name)
return message
@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(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(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):
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.fb_location, pr.fb_hometown
from `tabProfile` pr
where (pr.first_name like %(term)s or pr.last_name like %(term)s)
and pr.name not in ("Guest", "Administrator") is not null 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]

+ 4
- 3
webnotes/website/doctype/user_vote/user_vote.py Visa fil

@@ -1,8 +1,6 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt

# For license information, please see license.txt

from __future__ import unicode_literals
import webnotes
from webnotes.webutils import get_access
@@ -37,7 +35,10 @@ def on_doctype_update():
@webnotes.whitelist()
def set_vote(ref_doctype, ref_name):
website_group = webnotes.conn.get_value(ref_doctype, ref_name, "website_group")
if not get_access(website_group).get("read"):
pathname = webnotes.conn.get_value("Website Sitemap", {"ref_doctype": "Website Group",
"docname": website_group})
if not get_access(pathname).get("read"):
raise webnotes.PermissionError
try:


+ 10
- 3
webnotes/website/doctype/website_group/website_group.py Visa fil

@@ -3,8 +3,8 @@

from __future__ import unicode_literals
import webnotes
from webnotes.webutils import WebsiteGenerator, cleanup_page_name
from webnotes.templates.generators.website_group import get_context
from webnotes.webutils import WebsiteGenerator
from webnotes.templates.generators.website_group import clear_cache
from webnotes.model.doc import make_autoname

class DocType(WebsiteGenerator):
@@ -15,4 +15,11 @@ class DocType(WebsiteGenerator):
self.doc.name = make_autoname("Website-Group-.######")
def get_page_title(self):
return self.doc.group_title
return self.doc.group_title
def on_update(self):
WebsiteGenerator.on_update(self)
clear_cache(website_group=self.doc.name)
def after_insert(self):
clear_cache(path=self.doc.parent_website_sitemap)

+ 1
- 1
webnotes/website/doctype/website_settings/website_settings.py Visa fil

@@ -14,7 +14,7 @@ class DocType(DocListController):
def validate_home_page(self):
if self.doc.home_page and \
not webnotes.conn.get_value("Website Sitemap", {"page_name": self.doc.home_page}):
not webnotes.conn.get_value("Website Sitemap", {"name": self.doc.home_page}):
webnotes.throw(_("Invalid Home Page") + " (Standard pages - index, login, products, blog, about, contact)")
def validate_top_bar_items(self):


+ 2
- 1
webnotes/website/doctype/website_sitemap_permission/website_sitemap_permission.txt Visa fil

@@ -2,13 +2,14 @@
{
"creation": "2014-01-29 17:56:29",
"docstatus": 0,
"modified": "2014-01-29 18:05:29",
"modified": "2014-02-11 19:26:33",
"modified_by": "Administrator",
"owner": "Administrator"
},
{
"autoname": "WSP.######",
"doctype": "DocType",
"icon": "icon-shield",
"module": "Website",
"name": "__common__"
},


+ 1
- 1
webnotes/website/js/website.js Visa fil

@@ -8,7 +8,7 @@ $.extend(wn, {
require: function(url) {
if(wn._assets_loaded.indexOf(url)!==-1) return;
$.ajax({
url: url, //+ "?q=" + Math.floor(Math.random() * 1000),
url: url,
async: false,
dataType: "text",
success: function(data) {


+ 37
- 31
webnotes/website/js/website_group.js Visa fil

@@ -14,24 +14,28 @@ $.extend(website, {
$(".post-list-help").html(!website.access.write ? "You do not have permission to post" : "");
}
},
setup_pagination: function($btn, opts) {
$btn.removeClass("hide");
$btn.on("click", function() {
wn.call($.extend({
btn: $btn,
type: "GET",
callback: function(data) {
if(opts.prepend) {
opts.$wrapper.prepend(data.message);
} else {
opts.$wrapper.append(data.message);
setup_pagination: function() {
var $btn = $(".btn-more")
.removeClass("hide")
.on("click", function() {
wn.call({
btn: $btn,
type: "GET",
args: {
cmd: "webnotes.templates.website_group.forum.get_post_list_html",
limit_start: $(".post").length,
limit_length: 20,
group: website.group,
view: website.view,
pathname: website.pathname
},
callback: function(data) {
$(".post-list").append(data.message);
$btn.toggleClass("hide", !(data.message && data.message.length===opts.args.limit_length));
website.toggle_upvote();
}
$btn.toggleClass("hide", !(data.message && data.message.length===opts.args.limit_length));
}
}, opts))
});
})
});
},
bind_add_post: function() {
$(".btn-post-add").on("click", website.add_post);
@@ -47,7 +51,7 @@ $.extend(website, {
return;
}
website._update_post(this, "webnotes.website.doctype.post.post.add_post");
website._update_post(this, "webnotes.templates.website_group.post.add_post");
},
bind_save_post: function() {
$(".btn-post-add").addClass("hide");
@@ -60,7 +64,7 @@ $.extend(website, {
return;
}
website._update_post(this, "webnotes.website.doctype.post.post.save_post");
website._update_post(this, "webnotes.templates.website_group.post.save_post");
},
_update_post: function(btn, cmd) {
var values = website.get_editor_values();
@@ -74,17 +78,11 @@ $.extend(website, {
args: $.extend({
cmd: cmd,
group: website.group,
post: website.post || undefined
post: website.post || undefined,
}, values),
callback: function(data) {
var url = window.location.pathname + "?view=post&name=" + data.message;
window.location.href = url;
// if(history.pushState) {
// app.get_content(url);
// } else {
// window.location.href = url;
// }
}
});
},
@@ -175,7 +173,7 @@ $.extend(website, {
$post_editor.find('[data-fieldname="assigned_to"]').val(value);
bind_close();
},
method: "webnotes.website.doctype.post.post.suggest_user"
method: "webnotes.templates.website_group.post.suggest_user"
});
bind_close();
}
@@ -271,7 +269,7 @@ $.extend(website, {
}
},
toggle_upvote: function() {
if(!website.access.read) {
if(!website.access.read || !website.upvote) {
$(".upvote").remove();
}
},
@@ -279,7 +277,13 @@ $.extend(website, {
$(".post-editor").toggleClass("hide", !website.access.write);
},
setup_upvote: function() {
$(".post-list, .parent-post").on("click", ".upvote a", function() {
if(window.website.setup_upvote_done) return;
window.website.setup_upvote_done = true;
$(document).on("click", ".post-list .upvote a, .parent-post .upvote a", function() {
console.log("clicked");
var sid = wn.get_cookie("sid");
if(!sid || sid==="Guest") {
wn.msgprint("Please login to Upvote!");
@@ -315,6 +319,8 @@ $.extend(website, {
}).always(function() {
$btn.prop("disabled", false);
});
return false;
});
},
setup_autosuggest: function(opts) {
@@ -490,7 +496,7 @@ $.extend(website, {
profile: $tr.attr("data-profile"),
perm: $chk.attr("data-perm"),
value: $chk.prop("checked") ? "1" : "0",
sitemap_page: website.group
group: website.group
},
statusCode: {
403: function() {
@@ -515,7 +521,7 @@ $.extend(website, {
data: {
cmd: "webnotes.templates.website_group.settings.add_sitemap_permission",
profile: profile,
sitemap_page: website.group
group: website.group
},
success: function(data) {
$(".add-user-control").val("");


+ 5
- 0
webnotes/website/page/website_home/website_home.js Visa fil

@@ -49,6 +49,11 @@ wn.module_page["Website"] = [
doctype:"Blog Settings",
route: "Form/Blog Settings"
},
{
label: wn._("Website Page Permission"),
description: wn._("Define read, write, admin permissions for a Website Page."),
doctype:"Website Sitemap Permission",
},
]
},



+ 0
- 9
webnotes/webutils.py Visa fil

@@ -245,10 +245,6 @@ def get_website_settings():
context.web_include_js = hooks.web_include_js or []
context.web_include_css = hooks.web_include_css or []
# get settings from site config
if webnotes.conf.get("fb_app_id"):
context.fb_app_id = webnotes.conf.fb_app_id
return context
def is_ajax():
@@ -330,8 +326,6 @@ class WebsiteGenerator(DocListController):
webnotes.conn.set(self.doc, self._website_config.page_name_field, page_name)

def setup_generator(self):
if webnotes.flags.in_install_app:
return
self._website_config = webnotes.conn.get_values("Website Sitemap Config",
{"ref_doctype": self.doc.doctype}, "*")[0]

@@ -351,9 +345,6 @@ class WebsiteGenerator(DocListController):
remove_sitemap(ref_doctype=self.doc.doctype, docname=self.doc.name)
def update_sitemap(self):
if webnotes.flags.in_install_app:
return
self.setup_generator()
if self._website_config.condition_field and \


Laddar…
Avbryt
Spara