55 lines
2.4 KiB
Python
55 lines
2.4 KiB
Python
from django import forms
|
||
from django.contrib.auth.decorators import login_required
|
||
from django.core.exceptions import ValidationError
|
||
from django.http import HttpResponseForbidden
|
||
from django.shortcuts import redirect, render
|
||
from django.views.decorators.http import require_http_methods
|
||
from wagtail.admin import messages
|
||
|
||
from .models import SiteSettings
|
||
from .site_setup import COMPANY_FIELDS, default_site, setup_company_site
|
||
|
||
|
||
class CompanySetupForm(forms.ModelForm):
|
||
company_name = forms.CharField(label="企业名称", max_length=100)
|
||
create_demo = forms.BooleanField(
|
||
label="创建软件/技术服务企业示例站", required=False,
|
||
help_text="仅补齐缺失页面和菜单,新页面将公开发布;不会覆盖已有页面或菜单。",
|
||
)
|
||
|
||
class Meta:
|
||
model = SiteSettings
|
||
fields = COMPANY_FIELDS
|
||
help_texts = {
|
||
"contact_email": "新建咨询表单将使用此邮箱发送通知;需先配置服务器邮件服务。",
|
||
"icp_number": "请填写本企业真实备案号;未取得备案号时留空,不使用示例号码。",
|
||
}
|
||
|
||
|
||
@login_required(login_url="wagtailadmin_login")
|
||
@require_http_methods(["GET", "POST"])
|
||
def company_setup(request):
|
||
if not request.user.is_active or not request.user.is_superuser:
|
||
return HttpResponseForbidden("仅超级管理员可以初始化企业站点。")
|
||
try:
|
||
site = default_site()
|
||
except ValidationError as error:
|
||
return render(request, "core/site_setup.html", {"setup_error": ";".join(error.messages)})
|
||
|
||
settings = SiteSettings.for_site(site)
|
||
form = CompanySetupForm(request.POST if request.method == "POST" else None, instance=settings)
|
||
if request.method == "POST" and form.is_valid():
|
||
try:
|
||
created = setup_company_site(form.cleaned_data, form.cleaned_data["create_demo"])
|
||
except ValidationError as error:
|
||
form.add_error(None, ";".join(error.messages))
|
||
else:
|
||
result = f"企业资料已保存,新增 {len(created)} 个页面。" if form.cleaned_data["create_demo"] else "企业资料已保存,未创建示例内容。"
|
||
messages.success(request, result)
|
||
return redirect("company_site_setup")
|
||
return render(request, "core/site_setup.html", {
|
||
"form": form,
|
||
"site": site,
|
||
"pages": site.root_page.get_children().specific(),
|
||
})
|