mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-20 13:39:18 +00:00
added blog
This commit is contained in:
@@ -21,8 +21,8 @@ def cleanup():
|
|||||||
reload_doc("core", "doctype", "control_panel")
|
reload_doc("core", "doctype", "control_panel")
|
||||||
|
|
||||||
# cleanup page
|
# cleanup page
|
||||||
delete_doc("DocType", "Control Panel")
|
delete_doc("DocType", "Page")
|
||||||
reload_doc("core", "doctype", "control_panel")
|
reload_doc("core", "doctype", "page")
|
||||||
|
|
||||||
webnotes.conn.sql("""delete from tabSingles
|
webnotes.conn.sql("""delete from tabSingles
|
||||||
where field like 'startup_%' and doctype='Control Panel'""")
|
where field like 'startup_%' and doctype='Control Panel'""")
|
||||||
|
|||||||
@@ -9,13 +9,18 @@ def execute():
|
|||||||
cleanup_file_data()
|
cleanup_file_data()
|
||||||
update_patch_log()
|
update_patch_log()
|
||||||
from webnotes.modules import reload_doc
|
from webnotes.modules import reload_doc
|
||||||
reload_doc('website', 'Module Def', 'Website')
|
|
||||||
reload_doc('website', 'Role', 'Website Manager')
|
reload_doc('website', 'Role', 'Website Manager')
|
||||||
|
reload_doc('website', 'Module Def', 'Website')
|
||||||
reload_doc('website', 'doctype', 'home_settings')
|
reload_doc('website', 'doctype', 'home_settings')
|
||||||
reload_doc('website', 'doctype', 'top_bar_settings')
|
reload_doc('website', 'doctype', 'top_bar_settings')
|
||||||
reload_doc('website', 'doctype', 'top_bar_item')
|
reload_doc('website', 'doctype', 'top_bar_item')
|
||||||
reload_doc('website', 'page', 'home')
|
reload_doc('website', 'doctype', 'contact_us_settings')
|
||||||
|
reload_doc('website', 'doctype', 'about_us_settings')
|
||||||
|
|
||||||
|
reload_doc('website', 'page', 'home')
|
||||||
|
reload_doc('website', 'page', 'contact')
|
||||||
|
reload_doc('website', 'page', 'about')
|
||||||
|
|
||||||
def add_website_manager():
|
def add_website_manager():
|
||||||
"""add website manager to system manager"""
|
"""add website manager to system manager"""
|
||||||
for i in webnotes.conn.sql("""select distinct parent from tabUserRole
|
for i in webnotes.conn.sql("""select distinct parent from tabUserRole
|
||||||
|
|||||||
@@ -5,13 +5,14 @@
|
|||||||
{
|
{
|
||||||
'creation': '2012-01-23 17:05:32',
|
'creation': '2012-01-23 17:05:32',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2012-01-27 10:14:58',
|
'modified': '2012-01-27 14:30:06',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all Module Def Role
|
# These values are common for all Module Def Role
|
||||||
{
|
{
|
||||||
|
'__islocal': 1,
|
||||||
'doctype': 'Module Def Role',
|
'doctype': 'Module Def Role',
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'parent': 'Website',
|
'parent': 'Website',
|
||||||
@@ -21,7 +22,7 @@
|
|||||||
|
|
||||||
# These values are common for all Module Def Item
|
# These values are common for all Module Def Item
|
||||||
{
|
{
|
||||||
'doc_type': 'Single DocType',
|
'__islocal': 1,
|
||||||
'doctype': 'Module Def Item',
|
'doctype': 'Module Def Item',
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'parent': 'Website',
|
'parent': 'Website',
|
||||||
@@ -49,6 +50,15 @@
|
|||||||
{
|
{
|
||||||
'display_name': 'Top Bar Settings',
|
'display_name': 'Top Bar Settings',
|
||||||
'doc_name': 'Top Bar Settings',
|
'doc_name': 'Top Bar Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
|
'doctype': 'Module Def Item'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Module Def Item
|
||||||
|
{
|
||||||
|
'display_name': 'Blog',
|
||||||
|
'doc_name': 'Blog',
|
||||||
|
'doc_type': 'Forms',
|
||||||
'doctype': 'Module Def Item'
|
'doctype': 'Module Def Item'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -56,6 +66,15 @@
|
|||||||
{
|
{
|
||||||
'display_name': 'Home Settings',
|
'display_name': 'Home Settings',
|
||||||
'doc_name': 'Home Settings',
|
'doc_name': 'Home Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
|
'doctype': 'Module Def Item'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Module Def Item
|
||||||
|
{
|
||||||
|
'display_name': 'Top Bar Settings',
|
||||||
|
'doc_name': 'Top Bar Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
'doctype': 'Module Def Item'
|
'doctype': 'Module Def Item'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -63,6 +82,15 @@
|
|||||||
{
|
{
|
||||||
'display_name': 'Contact Us Settings',
|
'display_name': 'Contact Us Settings',
|
||||||
'doc_name': 'Contact Us Settings',
|
'doc_name': 'Contact Us Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
|
'doctype': 'Module Def Item'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Module Def Item
|
||||||
|
{
|
||||||
|
'display_name': 'Home Settings',
|
||||||
|
'doc_name': 'Home Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
'doctype': 'Module Def Item'
|
'doctype': 'Module Def Item'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -70,6 +98,23 @@
|
|||||||
{
|
{
|
||||||
'display_name': 'About Us Settings',
|
'display_name': 'About Us Settings',
|
||||||
'doc_name': 'About Us Settings',
|
'doc_name': 'About Us Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
|
'doctype': 'Module Def Item'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Module Def Item
|
||||||
|
{
|
||||||
|
'display_name': 'Contact Us Settings',
|
||||||
|
'doc_name': 'Contact Us Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
|
'doctype': 'Module Def Item'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Module Def Item
|
||||||
|
{
|
||||||
|
'display_name': 'About Us Settings',
|
||||||
|
'doc_name': 'About Us Settings',
|
||||||
|
'doc_type': 'Single DocType',
|
||||||
'doctype': 'Module Def Item'
|
'doctype': 'Module Def Item'
|
||||||
},
|
},
|
||||||
|
|
||||||
@@ -79,6 +124,18 @@
|
|||||||
'role': 'System Manager'
|
'role': 'System Manager'
|
||||||
},
|
},
|
||||||
|
|
||||||
|
# Module Def Role
|
||||||
|
{
|
||||||
|
'doctype': 'Module Def Role',
|
||||||
|
'role': 'System Manager'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Module Def Role
|
||||||
|
{
|
||||||
|
'doctype': 'Module Def Role',
|
||||||
|
'role': 'Website Manager'
|
||||||
|
},
|
||||||
|
|
||||||
# Module Def Role
|
# Module Def Role
|
||||||
{
|
{
|
||||||
'doctype': 'Module Def Role',
|
'doctype': 'Module Def Role',
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<div class="layout_wrapper">
|
<div class="layout_wrapper">
|
||||||
<div class="web-content" id="content-contact-us">
|
<div class="web-content" id="content-about-us">
|
||||||
{% if doc.headline %}
|
{% if doc.headline %}
|
||||||
<h1>{{ doc.headline }}</h1>
|
<h1>{{ doc.headline }}</h1>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
0
erpnext/website/doctype/blog/__init__.py
Normal file
0
erpnext/website/doctype/blog/__init__.py
Normal file
58
erpnext/website/doctype/blog/blog.py
Normal file
58
erpnext/website/doctype/blog/blog.py
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
"""
|
||||||
|
record of files
|
||||||
|
|
||||||
|
naming for same name files: file.gif, file-1.gif, file-2.gif etc
|
||||||
|
"""
|
||||||
|
|
||||||
|
import webnotes
|
||||||
|
|
||||||
|
class DocType():
|
||||||
|
def __init__(self, d, dl):
|
||||||
|
self.doc, self.doclist = d, dl
|
||||||
|
|
||||||
|
def autoname(self):
|
||||||
|
"""save file by its name"""
|
||||||
|
import re
|
||||||
|
self.doc.name = re.sub('[~!@#$%^&*()<>,."\']', '', self.doc.title.lower())
|
||||||
|
self.doc.name = '-'.join(self.doc.name.split()[:4])
|
||||||
|
if webnotes.conn.sql("""select name from tabBlog where name=%s""", self.doc.name) or \
|
||||||
|
webnotes.conn.sql("""select name from tabPage where name=%s""", self.doc.name):
|
||||||
|
webnotes.msgprint("Another page with similar title exists, please change the title",\
|
||||||
|
raise_exception=1)
|
||||||
|
|
||||||
|
def on_update(self):
|
||||||
|
"""write/update 'Page' with the blog"""
|
||||||
|
from webnotes.model.doc import Document
|
||||||
|
|
||||||
|
if webnotes.conn.sql("""select name from tabPage where name=%s""", self.doc.name):
|
||||||
|
p = Document('Page', self.doc.name)
|
||||||
|
else:
|
||||||
|
p = Document('Page')
|
||||||
|
|
||||||
|
p.title = self.doc.title
|
||||||
|
p.name = p.page_name = self.doc.name
|
||||||
|
p.module = 'Website'
|
||||||
|
p.standard = 'No'
|
||||||
|
|
||||||
|
from jinja2 import Template
|
||||||
|
import markdown2
|
||||||
|
import os
|
||||||
|
|
||||||
|
self.doc.content_html = markdown2.markdown(self.doc.content or '')
|
||||||
|
|
||||||
|
with open(os.path.join(os.path.dirname(__file__), 'template.html'), 'r') as f:
|
||||||
|
p.content = Template(f.read()).render(doc=self.doc)
|
||||||
|
|
||||||
|
with open(os.path.join(os.path.dirname(__file__), 'blog_page.js'), 'r') as f:
|
||||||
|
p.script = Template(f.read()).render(doc=self.doc)
|
||||||
|
|
||||||
|
p.save()
|
||||||
|
|
||||||
|
# add guest access
|
||||||
|
if not webnotes.conn.sql("""select parent from `tabPage Role`
|
||||||
|
where role='Guest' and parent=%s""", self.doc.name):
|
||||||
|
d = Document('Page Role')
|
||||||
|
d.parent = self.doc.name
|
||||||
|
d.role = 'Guest'
|
||||||
|
d.save()
|
||||||
|
|
||||||
88
erpnext/website/doctype/blog/blog.txt
Normal file
88
erpnext/website/doctype/blog/blog.txt
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
# DocType, Blog
|
||||||
|
[
|
||||||
|
|
||||||
|
# These values are common in all dictionaries
|
||||||
|
{
|
||||||
|
'creation': '2012-01-27 12:24:03',
|
||||||
|
'docstatus': 0,
|
||||||
|
'modified': '2012-01-27 12:24:03',
|
||||||
|
'modified_by': 'Administrator',
|
||||||
|
'owner': 'Administrator'
|
||||||
|
},
|
||||||
|
|
||||||
|
# These values are common for all DocType
|
||||||
|
{
|
||||||
|
'colour': 'White:FFF',
|
||||||
|
'doctype': 'DocType',
|
||||||
|
'module': 'Website',
|
||||||
|
'name': '__common__',
|
||||||
|
'section_style': 'Simple',
|
||||||
|
'show_in_menu': 0,
|
||||||
|
'version': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# These values are common for all DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'name': '__common__',
|
||||||
|
'parent': 'Blog',
|
||||||
|
'parentfield': 'fields',
|
||||||
|
'parenttype': 'DocType',
|
||||||
|
'permlevel': 0
|
||||||
|
},
|
||||||
|
|
||||||
|
# These values are common for all DocPerm
|
||||||
|
{
|
||||||
|
'create': 1,
|
||||||
|
'doctype': 'DocPerm',
|
||||||
|
'name': '__common__',
|
||||||
|
'parent': 'Blog',
|
||||||
|
'parentfield': 'permissions',
|
||||||
|
'parenttype': 'DocType',
|
||||||
|
'permlevel': 0,
|
||||||
|
'read': 1,
|
||||||
|
'write': 1
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocType, Blog
|
||||||
|
{
|
||||||
|
'doctype': 'DocType',
|
||||||
|
'name': 'Blog'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocPerm
|
||||||
|
{
|
||||||
|
'doctype': 'DocPerm',
|
||||||
|
'role': 'Website Manager'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocPerm
|
||||||
|
{
|
||||||
|
'doctype': 'DocPerm',
|
||||||
|
'role': 'Blogger'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'fieldname': 'title',
|
||||||
|
'fieldtype': 'Data',
|
||||||
|
'label': 'Title'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'fieldname': 'published',
|
||||||
|
'fieldtype': 'Check',
|
||||||
|
'label': 'Published'
|
||||||
|
},
|
||||||
|
|
||||||
|
# DocField
|
||||||
|
{
|
||||||
|
'doctype': 'DocField',
|
||||||
|
'fieldname': 'content',
|
||||||
|
'fieldtype': 'Code',
|
||||||
|
'label': 'Content'
|
||||||
|
}
|
||||||
|
]
|
||||||
71
erpnext/website/doctype/blog/blog_page.js
Normal file
71
erpnext/website/doctype/blog/blog_page.js
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
// js inside blog page
|
||||||
|
|
||||||
|
pscript['onload_{{ doc.name }}'] = function(wrapper) {
|
||||||
|
// sidebar
|
||||||
|
var side = $(wrapper).find('.web-side-section')
|
||||||
|
.append('<h4>Recent Posts</h4>').get(0);
|
||||||
|
|
||||||
|
wrapper.recent_list = new wn.widgets.Listing({
|
||||||
|
parent: side,
|
||||||
|
query: 'select name, title, left(content, 100) as content from tabBlog\
|
||||||
|
where ifnull(published,1)=1',
|
||||||
|
hide_refresh: true,
|
||||||
|
render_row: function(parent, data) {
|
||||||
|
if(data.content.length==100) data.content += '...';
|
||||||
|
parent.innerHTML = repl('<a href="#!%(name)s">%(title)s</a>\
|
||||||
|
<div class="comment">%(content)s</div><br>', data);
|
||||||
|
},
|
||||||
|
page_length: 5
|
||||||
|
});
|
||||||
|
wrapper.recent_list.run();
|
||||||
|
|
||||||
|
|
||||||
|
// comments
|
||||||
|
$(wrapper).find('.web-main-section').append('<h3>Comments</h3>');
|
||||||
|
|
||||||
|
wrapper.comment_list = new wn.widgets.Listing({
|
||||||
|
parent: $(wrapper).find('.web-main-section').get(0),
|
||||||
|
query: 'select comment, comment_by_fullname, comment_date\
|
||||||
|
from `tabComment Widget Record` where comment_doctype="Page"\
|
||||||
|
and comment_docname="{{ doc.name }}"',
|
||||||
|
no_result_message: 'Be the first one to comment',
|
||||||
|
render_row: function(parent, data) {
|
||||||
|
data.comment_date = dateutil.str_to_user(data.comment_date);
|
||||||
|
$(parent).html(repl("<div style='color:#777'>\
|
||||||
|
On %(comment_date)s %(comment_by_fullname)s said:\
|
||||||
|
</div>\
|
||||||
|
<p style='margin-left: 20px;'>%(comment)s</p><br>", data))
|
||||||
|
},
|
||||||
|
hide_refresh: true
|
||||||
|
});
|
||||||
|
wrapper.comment_list.run();
|
||||||
|
|
||||||
|
// add comment
|
||||||
|
$(wrapper).find('.web-main-section').append('<br><button class="btn add-comment">\
|
||||||
|
Add Comment</button>');
|
||||||
|
$(wrapper).find('button.add-comment').click(function(){
|
||||||
|
d = new wn.widgets.Dialog({
|
||||||
|
title: 'Add Comment',
|
||||||
|
fields: [
|
||||||
|
{fieldname:'comment_by_fullname', label:'Your Name', reqd:1, fieldtype:'Data'},
|
||||||
|
{fieldname:'comment_by', label:'Email Id', reqd:1, fieldtype:'Data'},
|
||||||
|
{fieldname:'comment', label:'Comment', reqd:1, fieldtype:'Text'},
|
||||||
|
{fieldname:'post', label:'Post', fieldtype:'Button'}
|
||||||
|
]
|
||||||
|
});
|
||||||
|
d.fields_dict.post.input.onclick = function() {
|
||||||
|
var btn = this;
|
||||||
|
var args = d.get_values();
|
||||||
|
if(!args) return;
|
||||||
|
args.comment_doctype = 'Page';
|
||||||
|
args.comment_docname = '{{ doc.name }}';
|
||||||
|
$(btn).set_working();
|
||||||
|
$c('webnotes.widgets.form.comments.add_comment', args, function(r) {
|
||||||
|
$(btn).done_working();
|
||||||
|
d.hide();
|
||||||
|
wrapper.comment_list.refresh();
|
||||||
|
})
|
||||||
|
}
|
||||||
|
d.show();
|
||||||
|
})
|
||||||
|
}
|
||||||
13
erpnext/website/doctype/blog/template.html
Normal file
13
erpnext/website/doctype/blog/template.html
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
<div class="layout_wrapper">
|
||||||
|
<div class="web-content" id="blog-{{ doc.name }}">
|
||||||
|
<h1>Blog</h1>
|
||||||
|
<br>
|
||||||
|
<div class="web-main-section">
|
||||||
|
<h2>{{ doc.title }}</h2>
|
||||||
|
{{ doc.content_html }}
|
||||||
|
</div>
|
||||||
|
<div class="web-side-section">
|
||||||
|
</div>
|
||||||
|
<div style="clear: both"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -5,7 +5,7 @@
|
|||||||
{
|
{
|
||||||
'creation': '2012-01-27 11:37:57',
|
'creation': '2012-01-27 11:37:57',
|
||||||
'docstatus': 0,
|
'docstatus': 0,
|
||||||
'modified': '2012-01-27 11:37:57',
|
'modified': '2012-01-27 13:26:42',
|
||||||
'modified_by': 'Administrator',
|
'modified_by': 'Administrator',
|
||||||
'owner': 'Administrator'
|
'owner': 'Administrator'
|
||||||
},
|
},
|
||||||
@@ -16,7 +16,8 @@
|
|||||||
'module': 'Website',
|
'module': 'Website',
|
||||||
'name': '__common__',
|
'name': '__common__',
|
||||||
'page_name': 'about',
|
'page_name': 'about',
|
||||||
'standard': 'Yes'
|
'standard': 'Yes',
|
||||||
|
'title': 'About Us'
|
||||||
},
|
},
|
||||||
|
|
||||||
# These values are common for all Page Role
|
# These values are common for all Page Role
|
||||||
|
|||||||
0
erpnext/website/page/blog/__init__.py
Normal file
0
erpnext/website/page/blog/__init__.py
Normal file
44
erpnext/website/page/blog/blog.txt
Normal file
44
erpnext/website/page/blog/blog.txt
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
# Page, blog
|
||||||
|
[
|
||||||
|
|
||||||
|
# These values are common in all dictionaries
|
||||||
|
{
|
||||||
|
'creation': '2012-01-27 15:47:52',
|
||||||
|
'docstatus': 0,
|
||||||
|
'modified': '2012-01-27 15:47:52',
|
||||||
|
'modified_by': 'Administrator',
|
||||||
|
'owner': 'Administrator'
|
||||||
|
},
|
||||||
|
|
||||||
|
# These values are common for all Page
|
||||||
|
{
|
||||||
|
'doctype': 'Page',
|
||||||
|
'module': 'Website',
|
||||||
|
'name': '__common__',
|
||||||
|
'page_name': 'blog',
|
||||||
|
'standard': 'Yes',
|
||||||
|
'title': 'Blog'
|
||||||
|
},
|
||||||
|
|
||||||
|
# These values are common for all Page Role
|
||||||
|
{
|
||||||
|
'__islocal': 1,
|
||||||
|
'doctype': 'Page Role',
|
||||||
|
'name': '__common__',
|
||||||
|
'parent': 'blog',
|
||||||
|
'parentfield': 'roles',
|
||||||
|
'parenttype': 'Page',
|
||||||
|
'role': 'Guest'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Page, blog
|
||||||
|
{
|
||||||
|
'doctype': 'Page',
|
||||||
|
'name': 'blog'
|
||||||
|
},
|
||||||
|
|
||||||
|
# Page Role
|
||||||
|
{
|
||||||
|
'doctype': 'Page Role'
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>ERPNext</title>
|
<title>ERPNext</title>
|
||||||
<meta name="author" content="">
|
<meta name="author" content="">
|
||||||
<script type="text/javascript">window._version_number="215";
|
<script type="text/javascript">window._version_number="228";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* lib/js/wn/class.js
|
* lib/js/wn/class.js
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
215
|
228
|
||||||
Reference in New Issue
Block a user