瀏覽代碼

start #807

version-14
Rushabh Mehta 11 年之前
父節點
當前提交
0a7da0795b
共有 15 個檔案被更改,包括 666 行新增3 行删除
  1. +5
    -0
      frappe/config/website.py
  2. +1
    -1
      frappe/hooks.py
  3. +4
    -0
      frappe/public/js/frappe/form/script_manager.js
  4. +116
    -0
      frappe/templates/generators/web_form.html
  5. +2
    -1
      frappe/utils/jinja.py
  6. +0
    -0
      frappe/website/doctype/web_form/__init__.py
  7. +6
    -0
      frappe/website/doctype/web_form/test_records.json
  8. +10
    -0
      frappe/website/doctype/web_form/test_web_form.py
  9. +47
    -0
      frappe/website/doctype/web_form/web_form.js
  10. +219
    -0
      frappe/website/doctype/web_form/web_form.json
  11. +50
    -0
      frappe/website/doctype/web_form/web_form.py
  12. +0
    -0
      frappe/website/doctype/web_form_field/__init__.py
  13. +196
    -0
      frappe/website/doctype/web_form_field/web_form_field.json
  14. +9
    -0
      frappe/website/doctype/web_form_field/web_form_field.py
  15. +1
    -1
      frappe/website/router.py

+ 5
- 0
frappe/config/website.py 查看文件

@@ -16,6 +16,11 @@ def get_data():
"name": "Blog Post",
"description": _("Single Post (article)."),
},
{
"type": "doctype",
"name": "Web Form",
"description": _("User editable form on Website."),
},
{
"type": "doctype",
"name": "Blogger",


+ 1
- 1
frappe/hooks.py 查看文件

@@ -35,7 +35,7 @@ notification_config = "frappe.core.notifications.get_notification_config"

before_tests = "frappe.utils.install.before_tests"

website_generators = ["Web Page", "Blog Post", "Website Group", "Blog Category"]
website_generators = ["Web Page", "Blog Post", "Website Group", "Blog Category", "Web Form"]

# permissions



+ 4
- 0
frappe/public/js/frappe/form/script_manager.js 查看文件

@@ -13,6 +13,10 @@ frappe.ui.form.on = frappe.ui.form.on_change = function(doctype, fieldname, hand
frappe.ui.form.handlers[doctype][fieldname].push(handler)
}

frappe.ui.form.trigger = function(doctype, fieldname, callback) {
cur_frm.script_manager.trigger(fieldname, doctype, null, callback);
}

frappe.ui.form.ScriptManager = Class.extend({
init: function(opts) {
$.extend(this, opts);


+ 116
- 0
frappe/templates/generators/web_form.html 查看文件

@@ -0,0 +1,116 @@
{% block title %}{{ title }}{% endblock %}

{% block header %}
{{ title }}
{% endblock %}

{% block content %}

{% if login_required and user=="Guest" %}
<div class="alert alert-warning">{{ _("Please login to create a new {0}").format(_(doc_type)) }}</div>

{% else %}
<div class="form-message alert alert-info hide"></div>
<form class="form-horizontal" role="form"
data-web-form="{{ name }}">
<input type="hidden" name="web_form" value="{{ name }}">
<input type="hidden" name="doctype" value="{{ doc_type }}">
{% if params.name -%}
<input type="hidden" name="name" value="{{ params.name }}">
{%- endif %}
{% for field in web_form_fields %}
{% if field.fieldtype=="Data" %}
<div class="form-group">
<label for="{{ field.fieldname }}" class="col-sm-3 control-label">
{{ field.label }}</label>
<div class="col-sm-9">
<input type="text" class="form-control" name="{{ field.fieldname }}"
id="{{ field.fieldname }}" placeholder="{{ field.placeholder or '' }}">
{% if field.description -%}
<span class="help-block">{{ field.description }}</span>
{%- endif %}
</div>
</div>
{% elif field.fieldtype=="Select" %}
<div class="form-group">
<label for="{{ field.fieldname }}" class="col-sm-3 control-label">
{{ field.label }}</label>
<div class="col-sm-9">
<select class="form-control" name="{{ field.fieldname }}"
id="{{ field.fieldname }}">
{% for option in field.options.split("\n") %}
<option value="{{ option }}">{{ option }}</option>
{% endfor %}
</select>
{% if field.description -%}
<span class="help-block">{{ field.description }}</span>
{%- endif %}
</div>
</div>
{% elif field.fieldtype=="Text" %}
<div class="form-group">
<label for="{{ field.fieldname }}" class="col-sm-3 control-label">
{{ field.label }}</label>
<div class="col-sm-9">
<textarea class="form-control" name="{{ field.fieldname }}"
id="{{ field.fieldname }}" style="height: 100px;"></textarea>
{% if field.description -%}
<span class="help-block">{{ field.description }}</span>
{%- endif %}
</div>
</div>
{% elif field.fieldtype=="Check" %}
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<div class="checkbox">
<label>
<input type="checkbox" id="{{ field.fieldname }}"
name="{{ field.fieldname }}"> {{ field.label }}
</label>
</div>
</div>
</div>
{% endif %}
{% endfor %}
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
{% endif %}
{% endblock %}

{% block script %}
<script>
frappe.ready(function() {
var args = {},
$form = $("form[data-web-form='{{ name }}']");
$form.find("[name]").each(function() {
args[$(this).attr("name")] = $(this).val();
});

$("form[data-web-form='{{ name }}']").on("submit", function() {
args =
frappe.call({
type: "POST",
method: "frappe.website.doctype.web_form.web_form.accept",
args: args,
btn: $form.find("[type='submit']"),
callback: function(data) {
if(!data.exc) {
$form.addClass("hide");
$(".form-message")
.html("{{ success_message or 'Thank You!' }}")
.removeClass("hide");
{% if success_url -%}
window.location.href = "{{ success_url }}"
{%- endif %};
}
}
})
return false;
})
});
</script>
{% endblock %}

+ 2
- 1
frappe/utils/jinja.py 查看文件

@@ -51,7 +51,8 @@ def get_allowed_functions_for_jenv():
"get_meta": frappe.get_meta,
"get_doc": frappe.get_doc,
"get_list": frappe.get_list,
"utils": datautils
"utils": datautils,
"user": frappe.session.user
},
"get_visible_columns": \
frappe.get_attr("frappe.templates.pages.print.get_visible_columns"),


+ 0
- 0
frappe/website/doctype/web_form/__init__.py 查看文件


+ 6
- 0
frappe/website/doctype/web_form/test_records.json 查看文件

@@ -0,0 +1,6 @@
[
{
"doctype": "Web Form",
"name": "_Test Web Form 1"
}
]

+ 10
- 0
frappe/website/doctype/web_form/test_web_form.py 查看文件

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

import frappe
import unittest

test_records = frappe.get_test_records('Web Form')

class TestWebForm(unittest.TestCase):
pass

+ 47
- 0
frappe/website/doctype/web_form/web_form.js 查看文件

@@ -0,0 +1,47 @@
frappe.web_form = {
set_fieldname_select: function(frm) {
var me = this,
doc = frm.doc;
if(doc.doc_type) {
frappe.model.with_doctype(doc.doc_type, function() {
var fields = $.map(frappe.get_doc("DocType", frm.doc.doc_type).fields, function(d) {
return frappe.model.no_value_type.indexOf(d.fieldtype)===-1 ?
d.fieldname : null;
})
frappe.meta.get_docfield("Web Form Field", "fieldname", frm.doc.name).options
= [""].concat(fields);
});
}
}
}

frappe.ui.form.on("Web Form", "refresh", function(frm) {
frappe.web_form.set_fieldname_select(frm);

if (!frm.doc.__islocal && frm.doc.published) {
cur_frm.set_intro(__("Published on website at: {0}",
[repl('<a href="/%(website_route)s" target="_blank">/%(website_route)s</a>',
frm.doc.__onload)]));
}

});

frappe.ui.form.on("Web Form", "doc_type", function(frm) {
frappe.web_form.set_fieldname_select(frm);
});

frappe.ui.form.on("Web Form Field", "fieldname", function(frm, doctype, name) {
var doc = frappe.get_doc(doctype, name);
df = $.map(frappe.get_doc("DocType", frm.doc.doc_type).fields, function(d) {
return doc.fieldname==d.fieldname ? d : null; })[0];

doc.label = df.label;
doc.reqd = df.reqd;
doc.options = df.options;
doc.fieldtype = frappe.meta.get_docfield("Web Form Field", "fieldtype")
.options.split("\n").indexOf(df.fieldtype)===-1 ? "Data" : df.fieldtype;
doc.description = df.description;
doc["default"] = df["default"];

frm.refresh_field("web_form_fields");
});

+ 219
- 0
frappe/website/doctype/web_form/web_form.json 查看文件

@@ -0,0 +1,219 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"autoname": "field:title",
"creation": "2014-09-01 14:08:48.624556",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "Transaction",
"fields": [
{
"allow_on_submit": 0,
"fieldname": "title",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Title",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"description": "Website URL",
"fieldname": "page_name",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Page Name",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "doc_type",
"fieldtype": "Link",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Select DocType",
"no_copy": 0,
"options": "DocType",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "column_break_4",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"fieldname": "published",
"fieldtype": "Check",
"label": "Published",
"permlevel": 0
},
{
"allow_on_submit": 0,
"fieldname": "login_required",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Login Required",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"depends_on": "login_required",
"fieldname": "allow_edit",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Allow Edit",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"depends_on": "login_required",
"fieldname": "allow_multiple",
"fieldtype": "Check",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Allow Multiple",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"fieldname": "actions",
"fieldtype": "Section Break",
"label": "Actions",
"permlevel": 0
},
{
"description": "Message to be displayed on successful completion",
"fieldname": "success_message",
"fieldtype": "Text",
"label": "Success Message",
"permlevel": 0
},
{
"description": "Go to this url after completing the form.",
"fieldname": "success_url",
"fieldtype": "Data",
"label": "Success URL",
"permlevel": 0
},
{
"fieldname": "fields",
"fieldtype": "Section Break",
"label": "Fields",
"permlevel": 0
},
{
"fieldname": "web_form_fields",
"fieldtype": "Table",
"label": "Web Form Fields",
"options": "Web Form Field",
"permlevel": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"icon": "icon-edit",
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 0,
"modified": "2014-09-01 18:12:25.643567",
"modified_by": "Administrator",
"module": "Website",
"name": "Web Form",
"name_case": "",
"owner": "Administrator",
"permissions": [
{
"amend": 0,
"apply_user_permissions": 0,
"cancel": 0,
"create": 1,
"delete": 1,
"email": 0,
"export": 0,
"import": 0,
"permlevel": 0,
"print": 0,
"read": 1,
"report": 1,
"role": "Website Manager",
"set_user_permissions": 0,
"submit": 0,
"write": 1
}
],
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",
"sort_order": "DESC"
}

+ 50
- 0
frappe/website/doctype/web_form/web_form.py 查看文件

@@ -0,0 +1,50 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt

from __future__ import unicode_literals
import frappe
from frappe.website.website_generator import WebsiteGenerator

# parameters
# name (edit)
# new

class WebForm(WebsiteGenerator):
template = "templates/generators/web_form.html"
condition_field = "published"
page_title_field = "title"
no_cache = 1

def get_context(self, context):
context.params = frappe.form_dict
if frappe.form_dict.name:
context.doc = frappe.get_doc(self.doc_type, frappe.form_dict.name)

return context

@frappe.whitelist(allow_guest=True)
def accept():
args = frappe.form_dict
if args.name:
doc = frappe.get_doc(args.doctype, args.name)
else:
doc = frappe.new_doc(args.doctype)

for fieldname, value in args.iteritems():
if fieldname not in ("web_form", "cmd"):
doc.set(fieldname, value)

if args.name:
if doc.owner==frappe.session.user:
doc.update(ignore_permissions=True)
else:
# only if permissions are present
doc.update()

else:
# insert
web_form = frappe.get_doc("Web Form", args.web_form)
if web_form.login_required and frappe.session.user=="Guest":
frappe.throw(_("You must login to submit this form"))

doc.insert(ignore_permissions = True)

+ 0
- 0
frappe/website/doctype/web_form_field/__init__.py 查看文件


+ 196
- 0
frappe/website/doctype/web_form_field/web_form_field.json 查看文件

@@ -0,0 +1,196 @@
{
"allow_copy": 0,
"allow_import": 0,
"allow_rename": 0,
"creation": "2014-09-01 14:14:14.292173",
"custom": 0,
"docstatus": 0,
"doctype": "DocType",
"document_type": "",
"fields": [
{
"allow_on_submit": 0,
"fieldname": "fieldname",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Fieldname",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "fieldtype",
"fieldtype": "Select",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Fieldtype",
"no_copy": 0,
"options": "Attach\nCheck\nData\nHTML\nSelect\nText",
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "label",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Label",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 1,
"search_index": 0,
"set_only_once": 0
},
{
"fieldname": "reqd",
"fieldtype": "Check",
"label": "Mandatory",
"permlevel": 0
},
{
"allow_on_submit": 0,
"fieldname": "column_break_4",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "options",
"fieldtype": "Text",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 1,
"label": "Options",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "section_break_6",
"fieldtype": "Section Break",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "description",
"fieldtype": "Text",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Description",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "column_break_8",
"fieldtype": "Column Break",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
},
{
"allow_on_submit": 0,
"fieldname": "default",
"fieldtype": "Data",
"hidden": 0,
"ignore_user_permissions": 0,
"in_filter": 0,
"in_list_view": 0,
"label": "Default",
"no_copy": 0,
"permlevel": 0,
"print_hide": 0,
"read_only": 0,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"set_only_once": 0
}
],
"hide_heading": 0,
"hide_toolbar": 0,
"in_create": 0,
"in_dialog": 0,
"is_submittable": 0,
"issingle": 0,
"istable": 1,
"modified": "2014-09-01 14:14:40.425829",
"modified_by": "Administrator",
"module": "Website",
"name": "Web Form Field",
"name_case": "",
"owner": "Administrator",
"permissions": [],
"read_only": 0,
"read_only_onload": 0,
"sort_field": "modified",
"sort_order": "DESC"
}

+ 9
- 0
frappe/website/doctype/web_form_field/web_form_field.py 查看文件

@@ -0,0 +1,9 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and contributors
# For license information, please see license.txt

from __future__ import unicode_literals
import frappe
from frappe.model.document import Document

class WebFormField(Document):
pass

+ 1
- 1
frappe/website/router.py 查看文件

@@ -96,7 +96,7 @@ def clear_sitemap():
if meta.get_field("parent_website_route"):
query = "select page_name, parent_website_route from `tab{0}`"
else:
query = "select page_name, "" from `tab{0}`"
query = "select page_name, '' from `tab{0}`"

for r in frappe.db.sql(query.format(doctype)):
if r[0]:


Loading…
取消
儲存