- Go 96.8%
- CSS 1.8%
- HTML 0.7%
- Dockerfile 0.6%
|
|
||
|---|---|---|
| .vscode | ||
| cmd/merge_files | ||
| db | ||
| forms/test | ||
| http | ||
| lib | ||
| log | ||
| middleware | ||
| route | ||
| static | ||
| structs | ||
| tmpl | ||
| .dockerignore | ||
| .drone.yml | ||
| .gitignore | ||
| .woodpecker.yml | ||
| Dockerfile | ||
| Dockerfile.amd64 | ||
| go.mod | ||
| go.sum | ||
| main.go | ||
| README.md | ||
| TODO | ||
Генератор регистрационных форм на различные мероприятия
Приложение предназначено для создание шаблонов форм регистрации на различные мероприятия (конференции, семинары, собрания и т.д.). Приложение перебирает директории из указанной. Каждая директория является отдельной самостоятельной формой и из нее ищет файл settings.json/settings.yaml/settings.yml.
Файл настроек
{
"cssFiles":["Файлы со стилями"],
"cssExternals":["Урлы для внешних файлов со стилями"],
"jsFiles":["Файлы со скриптами"],
"jsExternals":["Урлы для внешних скриптов"],
"formTempl":"Шаблон формы",
"mailTempl": "Шаблон почтового сообщения",
"formSuccessTempl":"Шаблон формы для отображения в случае успеха",
"title":"Заголовок формы",
"fields":[
{
"name":"Название поля для БД. Он же id для html-элемента",
"class":"Класс, который будет присвоен полю с элементом",
"display":"Отображаемое название поля",
"description":"Описание поля",
"required":"Поле обязательное к заполнению",
"type":"Тип поля",
"multi":"Указывается true, если поле имеет несколько значений. Применяется для file и select",
"same":"Указывается true, если помимо присутствующих значений можно выбрать 'свой вариант'",
"select":"Варианты для поля select. Если указан параметр multi=true, то можно выбрать сразу несколько вариантов",
"selected":"Параметр, который введен по умолчанию при открытии формы",
"checked":"Если поле является чекбоксом то нужно ли чтобы чекбокс был установлен по умолчанию",
"value":"Начальное значение поля",
"regexp":"Регулярное выражение для проверки корректности ввода значения. Если пусто, то не используется",
"format":"Фиксированный формат. На основе формата формируется регулярное выражение, которое проверяет корректность заполнения поля.",
}
],
"hasCaptcha":"Делать проверку капчи",
"hasAcceptPersonalData":"Галочка для согласия на обработку персональных данных",
"acceptReceiveNewsletter":"Галочка на согласие получать рассылку",
"hasEmail":"Электронная почта для обратной связи",
"smtpAddr":"Адрес сервера электронной почты для отправки",
"smtpPort":"Порт сервера электронной почты для отправки",
"smtpLogin":"Логин для отправки",
"smtpPassword":"Пароль для отправки",
"smtpEmailFrom":"Адрес электронной почта для отправки \"откуда\"",
"smtpEmailTo":"Адрес электронной почта для отправки \"куда\"",
"adminLogin":"Логин администратора формы",
"adminPassword":"Пароль администратора формы"
}
Тип поля указывается в числовом значении:
1 - Текстовое поле
2 - Поле перечисления (select)
3 - Поле выбора файла
4 - Поле с "галочкой"
5 - Поле электронной почты (E-Mail)
6 - Телефон. Нормализация телефонного номера для сохранения в БД. В другом случае нормализованный номер телефона. Поле принимает одно значение=один номер. При нормализации удаляются все символы, кроме знака "+" в начале строки.
Шаблон
Для написания шаблона используется шаблонизатор golang text/template. Для подробной информации рекомендуется обратиться к их документации.
Пример шаблона
<html>
<head>
<title>{{ .Title }}</title>
{{ range $index, $cssName := .CSSExternals }}
{{ externalCss $cssName }}
{{ end }}
{{ range $index, $cssName := .CSSFiles }}
{{ linkCss $ $cssName }}
{{ end }}
</head>
<body>
{{ range $index, $jsName := .JSExternals }}
{{ externalJs $jsName }}
{{ end }}
{{ range $index, $jsName := .JSFiles }}
{{ linkJs $ $jsName }}
{{ end }}
{{ $lnk := linkForm . }}
<div class="header">
<img src="{{ $lnk }}/logo.webp">
<p>{{ .Title }}</p>
</div>
<form id="register" action="{{ normalizePath $lnk }}" method="POST" enctype="multipart/form-data">
{{ range $index, $field := .Fields }}
<div class="{{ $field.Class }}">
<label for="{{ $field.Name }}">{{ $field.Display }}{{ if $field.Required }}<span class="required">*</span>{{ end }}</label>
{{ input $field }}
<div id="{{ $field.Name }}" class="error">{{ $field.Error }}</div>
</div>
{{ end }}
<div class="catpcha">
<div>
<label for="captcha">Введите текст с картинки<span class="required">*</span>{{ imageCaptcha }}</label>
</div>
{{ inputCaptcha }}
</div>
<div class="error">{{ $.Error }}</div>
<input type="submit" class="btn btn-submit" value="Отправить">
</form>
</body>
</html>
Такой же тип шаблонизации используется для вывода страницы с успешной проверкой формы и для отправки информационного сообщения. Исключение составляет то, что текст, полученный для электронной почты, используется как обычный текст, а не как HTML.
Уведомления по электронно почте
В случае успеха отправки формы отправляется электронное письмо на адрес, указанный в smtpEmailTo и, если указана опция hasEmail, то автоматически добавляется поле email как обязательное и отправляется письмо человеку, который заполняет эту форму. Различия в письмах в том, что для пользователя вложения в письмо не прикрепляются, а при отправки на smtpEmailTo - прикрепляются.
Доступные дополнительные функции в шаблонизаторе
Все свойства формы доступны из шаблонизатора с той разницей, что первая прописная буква меняется на заглавную за исключением некоторых полей: CSSFiles, CSSExternals, JSFiles, JSExternals. Кроме того для каждого поля есть свойство Error, в которое вписывается ошибка для поля в случае если форма при сохранении не принята, а так же есть корневое поле формы Error для отображения общей информации ошибки.
linkCss
Ссылка на локальный CSS
externalCss
Ссылка на внешний CSS
linkJs
Ссылка на локальный JS
externalJs
Ссылка на внешний JS
linkForm
Ссылка на сохранение формы для аргумента action на форме. Можно применять для других целей, например, для уазания пути на дополнительные статичные файлы для загрузки.
input
Генератор тэга input
label
Генератор тэга label
labelCaptcha
Генератор тэга label для капчи
imageCaptcha
Генератор тэга img для капчи
inputCaptcha
Генератор тэга input для капчи
normalizePath
Нормализация пути ссылки
Параметры запуска
Приложение поддерживает 2 метода передачи параметров запуска: командная строка и переменные окружения.
Для получения списка параметров и переменных окружения достаточно запустить приложение с ключом "--help".