Browse Source

адаптация для AVE.CMS v3.25 и выше

master
Repellent 4 years ago
parent
commit
c7764957c4
  1. 14
      README.md
  2. 1618
      contactsnew/class.contactsnew.php
  3. 313
      contactsnew/demo/demo_ajax_jqval.php
  4. 303
      contactsnew/demo/demo_jqval.php
  5. 23
      contactsnew/js/jquery.form.min.js
  6. 4
      contactsnew/js/jquery.validate.min.js
  7. 187
      contactsnew/lang/bg.txt
  8. 187
      contactsnew/lang/en.txt
  9. 8
      contactsnew/lang/index.php
  10. 187
      contactsnew/lang/ua.txt
  11. 166
      contactsnew/module.php
  12. 133
      contactsnew/sql.php
  13. 8
      contactsnew/templates/index.php
  14. 1653
      forms/class/forms.php
  15. 32
      forms/demo.php
  16. 0
      forms/images/ref.png
  17. 8
      forms/index.php
  18. 19
      forms/info.php
  19. 0
      forms/lang/index.php
  20. 33
      forms/lang/ru.txt
  21. 158
      forms/module.php
  22. 81
      forms/sql.php
  23. 14
      forms/templates/dialog.tpl
  24. 53
      forms/templates/form_edit.tpl
  25. 11
      forms/templates/form_fields.tpl
  26. 19
      forms/templates/forms.tpl
  27. 14
      forms/templates/history.tpl
  28. 0
      forms/templates/index.php

14
README.md

@ -1,19 +1,21 @@
## contactsnew
## forms
# Модуль Контакты New v1.2.6
# Модуль Формы v1.26.0
![Module Contacts new](https://gitget.ru/img/module_con_new.png "Module Contacts new")
![Module Forms](https://gitget.ru/img/module_con_new.png "Module Forms")
### адаптирован для AVE.CMS v3.2
### адаптирован для AVE.CMS v3.26
## Модуль предназначен для создания веб-форм (например, обратной связи или простейшего оформления заказа), которые могут состоять из любого набора полей.
## Для вывода в публичной части сайта используйте тег <strong>[mod_contactsnew:XXX]</strong>, где XXX - это id или алиас формы.
## Для вывода в публичной части сайта используйте тег <strong>[mod_forms:XXX]</strong>, где XXX - это id или алиас формы.
## Перед копированием модуля в папку modules, удалите файл README.md, копируйте только корневую папку contactsnew со всем ее содержимым внутри!
## Перед копированием модуля в папку modules, удалите файл README.md, копируйте только корневую папку forms со всем ее содержимым внутри!
## Changelog:
01.09.2019 - Версия v1.26.0 - Модуль переименован в модуль Формы. Адаптация для версии ave-cms версии 3.25 и выше, удалено лишнее.
10.04.2019 - Версия 1.2.6 - изменена структура расположения демо-файлов, добавлен пример создания демо-формы с jQuery Validation Plugin и reCAPTCHA v3,
API ключи для reCAPTCHA v3 необходимо установить непосредственно в AVE.cms (версия 3.23 начиная с обновления в репозитории от 24.03.2019) в разделе
Системные настройки->Дополнительные настройки. В шаблоне демо-формы в js скрипте параметр data.score < 0.5 - означает минимальную оценку для успешной верификации reCAPTCHA.

1618
contactsnew/class.contactsnew.php

File diff suppressed because it is too large Load Diff

313
contactsnew/demo/demo_ajax_jqval.php

@ -1,313 +0,0 @@
<?php
$form_tpl = array(
'ajax_jqval_cap' =>
'<div id=\\"[tag:formalias]\\" class=\\"col-sm-8 col-sm-offset-2\\">
<div class=\\"page-header\\">
<div class=\\"alert alert-info text-center\\" role=\\"alert\\">
<h4>Демо интеграции в Модуль Контакты New v1.2.5<br><br> <a href=\\"https://jqueryvalidation.org/\\">jQuery Validation Plugin</a> &nbsp;&nbsp;и&nbsp;&nbsp; <a href=\\"https://developers.google.com/recaptcha/docs/v3\\">reCAPTCHA v3</a></h4>
</div>
<div class=\\"alert alert-warning alert-dismissable\\">
Если форма не работает, или не работает валидация (отправляется пустая форма без проверки и т.п.) убедитесь, что библиотека jQuery (jquery.min.js - по умолчанию подключается модулем) подключена на странице только один раз! и расположена в секции &lt;head&gt; , а также подключен скрипт jquery.form.min.js (по умолчанию подключается модулем в разделе Скрипты и стили, необходимые для оформления и функционирования формы)
<button type=\\"button\\" class=\\"close\\" data-dismiss=\\"alert\\" aria-hidden=\\"true\\">&times;</button>
</div>
</div>
<div class=\\"panel panel-default\\">
<div class=\\"panel-heading\\">
<h3 class=\\"panel-title\\">[tag:formtitle]</h3>
</div>
<div class=\\"panel-body\\">
<form id=\\"form-[tag:formalias]\\" method=\\"post\\" enctype=\\"multipart/form-data\\" class=\\"form-horizontal\\" role=\\"form\\" action=\\"\\">
[tag:fld:email]
[tag:fld:subject]
[tag:fld:6]
[tag:fld:7]
[tag:fld:8]
[tag:fld:9]
<div class=\\"form-group\\">
<div id=\\"addbtn-[tag:formalias]\\" class=\\"col-sm-offset-4 col-sm-4\\">
<noscript>включите js в браузере</noscript>
</div>
</div>
</form>
</div>
</div>
</div>
<script type=\\"text/javascript\\">
$( document ).ready( function () {
$(\\"#addbtn-[tag:formalias]\\").append(\\\'<button type=\\"submit\\" class=\\"btn btn-primary\\">Отправить</button>\\\');
$( \\"#form-[tag:formalias]\\" ).validate( {
rules: {
\\"form-ajax_jqval_cap[1]\\": {
required: true,
email: true
},
\\"form-ajax_jqval_cap[2]\\": {
required: true,
minlength: 4
},
\\"form-ajax_jqval_cap[6]\\": {
required: true,
minlength: 2
},
\\"form-ajax_jqval_cap[7]\\": {
required: true,
maxlength: 4
},
\\"form-ajax_jqval_cap[8]\\": \\"required\\"
},
messages: {
\\"form-ajax_jqval_cap[1]\\": {
required: \\"Поле \\\'Email\\\' обязательно к заполнению\\",
email: \\"Пожалуйста, введите действительный адрес электронной почты\\"
},
\\"form-ajax_jqval_cap[2]\\": {
required: \\"Поле \\\'Тема\\\' обязательно к заполнению\\",
minlength: \\"Название темы должно содержать не менее 4 символов\\"
},
\\"form-ajax_jqval_cap[6]\\": {
required: \\"Поле \\\'Никнейм\\\' обязательно к заполнению\\",
minlength: \\"Никнейм не может быть менее 2 символов\\"
},
\\"form-ajax_jqval_cap[7]\\": {
required: \\"Поле \\\'Текст сообщения\\\' обязательно к заполнению\\",
maxlength: \\"Текст сообщения не может превышать 4 символов\\"
},
\\"form-ajax_jqval_cap[8]\\": \\"Чекбокс должен быть активным\\"
},
errorElement: \\"em\\",
errorPlacement: function ( error, element ) {
// Add the help-block class to the error element
error.addClass( \\"help-block\\" );
if ( element.prop( \\"type\\" ) === \\"checkbox\\" ) {
error.insertAfter( element.parent( \\"label\\" ) );
} else {
error.insertAfter( element );
}
},
highlight: function ( element, errorClass, validClass ) {
$( element ).parents( \\".col-sm-5\\" ).addClass( \\"has-error\\" ).removeClass( \\"has-success\\" );
},
unhighlight: function (element, errorClass, validClass) {
$( element ).parents( \\".col-sm-5\\" ).addClass( \\"has-success\\" ).removeClass( \\"has-error\\" );
},
submitHandler: function(form) {
if ($(\\".app_err_msg\\").length) {$(\\\'.app_err_msg\\\').remove();}
grecaptcha.ready(function() {
grecaptcha.execute(\\\'Публичный ключ reCAPTCHA v3\\\', {action: \\\'submit_form\\\'})
.then(function(token) {
$.ajax({
type: \\\'post\\\',
url: \\\'[tag:path]inc/recaptcha3srvcode.php\\\',
data: {token: token},
dataType: \\\'json\\\'
}).done(function(data) {
if (data.score < 0.5)
{$(\\\'#form-[tag:formalias]\\\').append(\\\'<div class=\\"app_err_msg alert alert-danger text-center\\" role=\\"alert\\"><h4>Вы не прошли валидацию защитой от спама reCAPTCHA</h4></div>\\\');
$(\\\'button[type=submit]\\\',form).prop(\\\'disabled\\\',true);
}
else {
$(\\\'#hidden_fld_[tag:formalias]\\\').val(\\\'\\\');
$(\\\'#hidden_fld_[tag:formalias]\\\').val(data.score);
$(\\\'#form-[tag:formalias]\\\').ajaxSubmit({
url: \\\'[tag:path]index.php?module=contactsnew\\\',
data: {
alias_id: \\\'[tag:formalias]\\\'
},
success: function (data) {
$(\\\'#form-[tag:formalias]\\\').after(data).remove();
}
});
return false;
}
});
});
});
}
});
});
</script>'
);
$demo = array(
'alias' => 'ajax_jqval_cap',
'title' => 'Демо форма с Ajax, jQuery Validation Plugin и reCAPTCHA v3',
'mail_set' => array(
'from_name' => '',
'from_email' => '',
'subject_tpl' => '[tag:fld:subject]',
'receivers' => array(
array(
'email' => '',
'name' => ''
)
),
'format' => 'text',
),
'rubheader' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://www.recaptcha.net/recaptcha/api.js?render=Публичный ключ reCAPTCHA v3"></script>
<script type="text/javascript" src="[tag:path]modules/contactsnew/js/jquery.form.min.js"></script>
<script type="text/javascript" src="[tag:path]modules/contactsnew/js/jquery.validate.min.js"></script>
',
'form_tpl' => $form_tpl[$_REQUEST['demo']],
'mail_tpl' => '[tag:easymail]',
'finish_tpl' => '<div class="alert alert-success">
Форма успешно отправлена! <a style="cursor: pointer; text-decoration: none;" onclick="window.location.href=this">Обновить страницу</a>
</div>
',
'code_onsubmit' => '',
'code_onvalidate' => '',
'code_onsend' => '',
'fields' => array(
1 => array(
'new' => true,
'form_id' => $fid,
'title' => 'email',
'active' => 1,
'type' => 'input',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
2 => array(
'new' => true,
'form_id' => $fid,
'title' => 'subject',
'active' => 1,
'type' => 'input',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
3 => array(
'new' => true,
'form_id' => $fid,
'title' => 'receivers',
'active' => 0,
'type' => 'select',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => 0,
'attributes' => '',
'tpl' => ''
),
4 => array(
'new' => true,
'form_id' => $fid,
'title' => 'copy',
'active' => 0,
'type' => 'checkbox',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => 1,
'attributes' => '',
'tpl' => ''
),
5 => array(
'new' => true,
'form_id' => $fid,
'title' => 'captcha',
'active' => 0,
'type' => 'input',
'main' => 1,
'setting' => '',
'required' => 1,
'defaultval' => '',
'attributes' => '',
'tpl' => ''
),
6 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Никнейм',
'active' => 1,
'type' => 'input',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
7 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Текст сообщения',
'active' => 1,
'type' => 'textarea',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
8 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Работа чекбокса',
'active' => 1,
'type' => 'checkbox',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" value="agree"',
'tpl' => '<div class="form-group">
<div class="col-sm-5 col-sm-offset-4">
<div class="checkbox">
<label>
[tag:fld]Пример валидации чекбокса
</label>
</div>
</div>
</div>'
),
9 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Оценка отправителя формы сервисом reCAPTCHA',
'active' => 1,
'type' => 'input',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="hidden_fld_[tag:formalias]" type="hidden"',
'tpl' => '[tag:fld]'
)
)
);

303
contactsnew/demo/demo_jqval.php

@ -1,303 +0,0 @@
<?php
$form_tpl = array(
'jqval_cap' =>
'<div id=\\"[tag:formalias]\\" class=\\"col-sm-8 col-sm-offset-2\\">
<div class=\\"page-header\\">
<div class=\\"alert alert-info text-center\\" role=\\"alert\\">
<h4>Демо интеграции в Модуль Контакты New v1.2.5<br><br> <a href=\\"https://jqueryvalidation.org/\\">jQuery Validation Plugin</a> &nbsp;&nbsp;и&nbsp;&nbsp; <a href=\\"https://developers.google.com/recaptcha/docs/v3\\">reCAPTCHA v3</a></h4>
</div>
<div class=\\"alert alert-warning alert-dismissable\\">
Если не работает валидация (отправляется пустая форма без проверки и т.п.) убедитесь, что библиотека jQuery (jquery.min.js - по умолчанию подключается модулем) подключена на странице только один раз! и расположена в секции &lt;head&gt;
<button type=\\"button\\" class=\\"close\\" data-dismiss=\\"alert\\" aria-hidden=\\"true\\">&times;</button>
</div>
</div>
<div class=\\"panel panel-default\\">
<div class=\\"panel-heading\\">
<h3 class=\\"panel-title\\">[tag:formtitle]</h3>
</div>
<div class=\\"panel-body\\">
<form id=\\"form-[tag:formalias]\\" method=\\"post\\" enctype=\\"multipart/form-data\\" class=\\"form-horizontal\\" role=\\"form\\" action=\\"\\">
[tag:fld:email]
[tag:fld:subject]
[tag:fld:6]
[tag:fld:7]
[tag:fld:8]
[tag:fld:9]
<div class=\\"form-group\\">
<div id=\\"addbtn-[tag:formalias]\\" class=\\"col-sm-offset-4 col-sm-4\\">
<noscript>включите js в браузере</noscript>
</div>
</div>
</form>
</div>
</div>
</div>
<script type=\\"text/javascript\\">
$( document ).ready( function () {
$(\\"#addbtn-[tag:formalias]\\").append(\\\'<button type=\\"submit\\" class=\\"btn btn-primary\\">Отправить</button>\\\');
$( \\"#form-[tag:formalias]\\" ).validate( {
rules: {
\\"form-jqval_cap[1]\\": {
required: true,
email: true
},
\\"form-jqval_cap[2]\\": {
required: true,
minlength: 4
},
\\"form-jqval_cap[6]\\": {
required: true,
minlength: 2
},
\\"form-jqval_cap[7]\\": {
required: true,
maxlength: 4
},
\\"form-jqval_cap[8]\\": \\"required\\"
},
messages: {
\\"form-jqval_cap[1]\\": {
required: \\"Поле \\\'Email\\\' обязательно к заполнению\\",
email: \\"Пожалуйста, введите действительный адрес электронной почты\\"
},
\\"form-jqval_cap[2]\\": {
required: \\"Поле \\\'Тема\\\' обязательно к заполнению\\",
minlength: \\"Название темы должно содержать не менее 4 символов\\"
},
\\"form-jqval_cap[6]\\": {
required: \\"Поле \\\'Никнейм\\\' обязательно к заполнению\\",
minlength: \\"Никнейм не может быть менее 2 символов\\"
},
\\"form-jqval_cap[7]\\": {
required: \\"Поле \\\'Текст сообщения\\\' обязательно к заполнению\\",
maxlength: \\"Текст сообщения не может превышать 4 символов\\"
},
\\"form-jqval_cap[8]\\": \\"Чекбокс должен быть активным\\"
},
errorElement: \\"em\\",
errorPlacement: function ( error, element ) {
// Add the help-block class to the error element
error.addClass( \\"help-block\\" );
if ( element.prop( \\"type\\" ) === \\"checkbox\\" ) {
error.insertAfter( element.parent( \\"label\\" ) );
} else {
error.insertAfter( element );
}
},
highlight: function ( element, errorClass, validClass ) {
$( element ).parents( \\".col-sm-5\\" ).addClass( \\"has-error\\" ).removeClass( \\"has-success\\" );
},
unhighlight: function (element, errorClass, validClass) {
$( element ).parents( \\".col-sm-5\\" ).addClass( \\"has-success\\" ).removeClass( \\"has-error\\" );
},
submitHandler: function(form) {
if ($(\\".app_err_msg\\").length) {$(\\\'.app_err_msg\\\').remove();}
grecaptcha.ready(function() {
grecaptcha.execute(\\\'Публичный ключ reCAPTCHA v3\\\', {action: \\\'submit_form\\\'})
.then(function(token) {
$.ajax({
type: \\\'post\\\',
url: \\\'[tag:path]inc/recaptcha3srvcode.php\\\',
data: {token: token},
dataType: \\\'json\\\'
}).done(function(data) {
if (data.score < 0.5)
{$(\\\'#form-[tag:formalias]\\\').append(\\\'<div class=\\"app_err_msg alert alert-danger text-center\\" role=\\"alert\\"><h4>Вы не прошли валидацию защитой от спама reCAPTCHA</h4></div>\\\');
$(\\\'button[type=submit]\\\',form).prop(\\\'disabled\\\',true);
}
else {
$(\\\'#hidden_fld_[tag:formalias]\\\').val(\\\'\\\');
$(\\\'#hidden_fld_[tag:formalias]\\\').val(data.score);
form.submit();
}
});
});
});
}
});
});
</script>'
);
$demo = array(
'alias' => 'jqval_cap',
'title' => 'Демо форма с jQuery Validation Plugin и reCAPTCHA v3',
'mail_set' => array(
'from_name' => '',
'from_email' => '',
'subject_tpl' => '[tag:fld:subject]',
'receivers' => array(
array(
'email' => '',
'name' => ''
)
),
'format' => 'text',
),
'rubheader' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://www.recaptcha.net/recaptcha/api.js?render=Публичный ключ reCAPTCHA v3"></script>
<script type="text/javascript" src="[tag:path]modules/contactsnew/js/jquery.validate.min.js"></script>
',
'form_tpl' => $form_tpl[$_REQUEST['demo']],
'mail_tpl' => '[tag:easymail]',
'finish_tpl' => '<div class="alert alert-success">
Форма успешно отправлена! <a style="cursor: pointer; text-decoration: none;" onclick="window.location.href=this">Обновить страницу</a>
</div>
',
'code_onsubmit' => '',
'code_onvalidate' => '',
'code_onsend' => '',
'fields' => array(
1 => array(
'new' => true,
'form_id' => $fid,
'title' => 'email',
'active' => 1,
'type' => 'input',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
2 => array(
'new' => true,
'form_id' => $fid,
'title' => 'subject',
'active' => 1,
'type' => 'input',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
3 => array(
'new' => true,
'form_id' => $fid,
'title' => 'receivers',
'active' => 0,
'type' => 'select',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => 0,
'attributes' => '',
'tpl' => ''
),
4 => array(
'new' => true,
'form_id' => $fid,
'title' => 'copy',
'active' => 0,
'type' => 'checkbox',
'main' => 1,
'setting' => '',
'required' => 0,
'defaultval' => 1,
'attributes' => '',
'tpl' => ''
),
5 => array(
'new' => true,
'form_id' => $fid,
'title' => 'captcha',
'active' => 0,
'type' => 'input',
'main' => 1,
'setting' => '',
'required' => 1,
'defaultval' => '',
'attributes' => '',
'tpl' => ''
),
6 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Никнейм',
'active' => 1,
'type' => 'input',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
7 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Текст сообщения',
'active' => 1,
'type' => 'textarea',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" class="form-control" placeholder="[tag:title]"',
'tpl' => '<div class="form-group">
<label class="col-sm-4 control-label" for="fld[[tag:id]]">[tag:title]</label>
<div class="col-sm-5">
[tag:fld]
</div>
</div>'
),
8 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Работа чекбокса',
'active' => 1,
'type' => 'checkbox',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="fld[[tag:id]]" value="agree"',
'tpl' => '<div class="form-group">
<div class="col-sm-5 col-sm-offset-4">
<div class="checkbox">
<label>
[tag:fld]Пример валидации чекбокса
</label>
</div>
</div>
</div>'
),
9 => array(
'new' => true,
'form_id' => $fid,
'title' => 'Оценка отправителя формы сервисом reCAPTCHA',
'active' => 1,
'type' => 'input',
'main' => 0,
'setting' => '',
'required' => 0,
'defaultval' => '',
'attributes' => 'id="hidden_fld_[tag:formalias]" type="hidden"',
'tpl' => '[tag:fld]'
)
)
);

23
contactsnew/js/jquery.form.min.js vendored

File diff suppressed because one or more lines are too long

4
contactsnew/js/jquery.validate.min.js vendored

File diff suppressed because one or more lines are too long

187
contactsnew/lang/bg.txt

@ -1,187 +0,0 @@
contacts = "Контакти New"
mod_info = "В дадения раздел са всички контактни форми в системата. тук Вие може да добавите нова контактна форма. както и да редактирате вече съществуващи."
forms = "Списък форми"
form = "Форма"
noforms = "В модула няма добавени форми"
form_new = "Добавяне на форма"
form_deleting = "Сигурни ли сте, че желаете да изтриете формата?"
form_creating = "Добавяне на нова форма"
form_notfound = "тази форма не е намерена"
form_editing = "Редактиране на форма"
main_sets = "Основни параметри"
title = "Наименование"
alias = "Алиас"
protection = "Защита от повторно изпращане"
protect_i = "Препоръчително за форми без Ajax.&lt;br/&gt;&lt;br/&gt;Ако защитата е включена, на финалната страница (след успешното изпращане на формата) при обновяванто на страницата потребителя няма да види съобщението &quot;Подтвърдете повторното изпращане на данните...&quot;. Вместо това ще се зареди наново празна форма."
demo = "Създаване на примерна форма"
demo_noajax = "без Ajax"
demo_ajax = "Ajax, сървъра връща кода на формата"
demo_ajax_o = "Ajax, сървъра връща резултатът от валидацията"
alias_i = "Опционално. Алиасът на формата позволява да се използва леко запомнящ се таг [mod_contact:alias] вместо [mod_contact:id]. Алиасът не трябва да бъде число, може да съдържа само цифри, латински букви, долна черта и дължина не повече от 20 символа и да е уникално в пределите на модула"
alias_accept = "Този алиас може да се използва"
alias_er_syn = "Грешен алиас!<br> Алиасът не може да бъде число, може да съдържа само цифри, латински букви, долна черта и дължина не повече от 20 символа"
alias_er_exists = "Грешен алиас!<br> Този алиас вече е зададен на друга контактна форма"
recs = "Получатели"
name = "Име"
fields_sets = "Настройки на полетата"
active_i = "Активиране на поле (ако чекбокса е празен, тагът в шаблона ще бъде заменен с празен ред)"
type = "Тип"
doc = "Документ"
multidoc = "Документ (multi)"
other_input = "Друг input"
other_input_i = "Атрибут type"
pattern_i = "Шаблон за preg_match<br/> <em>Пример:</em> <strong>/^[A-Za-z0-9]+$/ie</strong><br/><br/> Или филтър за filter_var<br/> <em>Пример:</em> <strong>FILTER_VALIDATE_EMAIL</strong>"
pattern = "Валидация"
defaultval = "По подразбиране"
sets = "Параметри"
attributes = "Атрибути на тега поле"
field_add = "Добави поле"
form_tpl = "Шаблон на формата"
mail_tpl = "Шаблон на писмо"
finish_tpl = "Шаблон на страница след изпращане на формата"
conditions = "Условия"
rubheader = "Скриптове и стилове, необходими за оформяне и функциониране на формата"
rubheader_info = "Избягвайте дублиране на скриптовете в модула и шаблона"
tag = "Таг"
field_creating = "Добавяне на поле..."
field_new_error = "Моля, въведете наименование на полето!"
type_i = "За <strong>input</strong> в атрибутите може да се укаже свой <strong>type</strong> (по подразбиране се поставя <strong>text</strong>)"
fld_tpl_toggle = "Покажи/скрий шаблона за извеждане на полето"
field_tpl = "Шаблон на полето"
fld_del = "Сигурни ли сте, че желаете да изтриете това поле?"
fld_deleting = "Изтриване на поле..."
required = "Задължително поле"
setting_empty = "Първо настройте опциите за избор (вляво)"
yes = "да"
no = "не"
fld_i = "Полето работи само ако тагът в поставен в шаблон и вляво е маркирано полето активация"
copy_fld_i = "<strong>Отправка копии </strong> будет выполнена, даже если в значении по умолчанию стоит галка, а тег в шаблон не вставлен / поле не активировано"
select_req_i = "Селект будет считаться не заполненным, если выбран первый вариант"
file_size = "Макс. размер, мб"
file_size2 = "Ограничение на размера на файла, мб"
create = "Добави"
edit = "Редактиране"
copy = "Копиране"
delete = "Изтриване"
actions = "Действия"
saved = "Съхранено"
notsaved = "Възникна грешка по време на съхранението"
created = "Формата е успешно записана"
copied = "Формата е успешно копирана и записана<br>Моля, редактирайте наименованието и алиаса"
deleting = "Изтриване..."
add_refresh = "Добави и обнови"
save = "Запиши"
return_to_forms = "Върни се към списъка с контактни форми"
refresh = "Обнови"
mail_set = "Настройки на писмата"
format = "Формат"
text = "Текст"
from_email = "Имейл на изпращача"
from_name = "Име на изпращача"
recs_main = "Главни получатели"
recs_main_i = "Тези адресати ще получават писмото задължително"
subject_tpl = "Шаблон на темата"
email_accept = "Правилен имейл"
email_error = "Грешен синтаксис на имейл!"
tag_fld = "Таг за поле, полето се поставя с използване на своя шаблон"
tag_fld_mail = "Значение на полето, въведено от потребителя"
tag_fld_tpl = "Таг за поле, полето се поставя с атрибутите си"
tag_attr = "Вмъкни основни атрибити"
tag_id = "Id на полето"
tag_title = "Таг за наименование на поле"
tag_valid = "Извеждано съдържание, ако полето съответства на зададения шаблон"
tag_invalid = "Извеждано съдържание, ако полето не съответства на зададения шаблон"
tag_nempty = "Извеждано съдържание, ако полето е маркирано като задължително и потребителя е въвел данни"
tag_empty = "Извеждано съдържание, ако полето е маркирано като задължително и потребителя не е въвел данни"
tag_path = "Път към корена на инсталацията"
tag_media = "Път към папката с шаблона<br><br><i>Пример:</i> [tag:mediapath]images/logo.gif"
tag_css = "Свива няколко css-файла в един. Връща път.<br><b>FFF</b> - имена на файлове, разделени с запетая<br><b>P</b> - път към папката с файлове, назадължителен. По подразбиране - [tag:mediapath]css/<br><br><i>Пример:</i> href=&quot;[tag:css:reset.css,style.css]&quot;"
tag_js = "Свива няколко js-файла в един. Връща път.<br><b>FFF</b> - имена на файлове, разделени с запетая<br><b>P</b> - път към папката с файлове, назадължителен. По подразбиране - [tag:mediapath]js/<br><br><i>Пример:</i> href=&quot;[tag:js:common.js,main.js]&quot;"
tag_formtitle = "Наименование на формата"
tag_formalias = "Алиас на формата (или id, ако не е въведен алиас)"
tag_url = "URL на текущата страница"
tag_docid = "ID на текущия документ"
tag_hide = "Таг, позволяващ скрит контент за определени групи потребители<br><br><strong>Х</strong> - номер на групата<br><strong>TEXT</strong> - текст, ако достъпа е забранен<br><br><em>Пример:</em> [tag:hide:2:Тази форма не е за вас!][/tag:hide]"
tag_uemail = "Имейл на потребителя (въз основата на данните от профила, а не на формата!)"
tag_uname = "Име и Фамилия на потребителя (въз основа на данните от профила)"
tag_ufname = "Име на потребителя (въз основа на данните от профила)"
tag_ulname = "Фамилия на потребителя (въз основа на данните от профила)"
tag_ulogin = "Потребителско име (въз основа на данните от профила)"
tag_if_fld = "Условие за значението на полето. В тага, използвайте стандартните конструкции за сравнение на PHP/JS<br><br><em>Пример:</em><br>[tag:if_fld:15 == '1']<br>...<br>[tag:elseif_fld:15 > '2']<br>...<br>[tag:else_fld]<br>...<br>[/tag:if_fld]"
tag_f_valid = "Извеждано съдържание, ако всички полета са преминали валидацията"
tag_f_invalid = "Извеждано съдържание, ако поне едно поле не преминало валидацията"
tag_easymail = "Генерива списък на всички значения на полетата, участващи в шаблона на формата ( вместо ръчно да се описват всички тагове)"
tag_if_user = "Извежда съдържанието в писмото на потребителя, попълнил формата"
tag_if_admin = "Извежда съдържанието в писмото за получателя-админ (&quot;главен получател&quot; или получател от поле &quot;избор на получателр&quot;)"
tag_fld_subject = "Значение на полето <strong>Тема</strong>"
tag_fld_email = "Значение на полето <strong>Имейл</strong>"
tag_sitename = "Наименование на сайта"
tag_sitehost = "Адрес на сайта"
info_php_tags = "Достъпни php и тагове"
code = "Изпълним код"
code_info = "Данните на формата (валидация, шаблони, получатели и т.д.) се пазят е променливата на класа $this->form."
code_onsubmit = "Код, изпълняван след изпращането на формата (преди валидацията)"
code_onvalidate = "Код, изпълняван след валидацията на формата"
code_onsend = "Код, изпълняван след изпращането на писмата"
mfld_email = "Имейл"
mfld_subject = "Тема"
mfld_receivers = "Избор на получатели"
mfld_captcha = "Капча"
mfld_copy = "Изпращане на копие"
tag_mail_empty = "не е попълнено"
history = "История"
date = "Дата"
author = "Автор"
status = "Статус"
stat_new = "Ново"
list_new = "Нови"
stat_viewed = "Видяно"
list_viewed = "Видени"
stat_replied = "Отговорено"
list_replied = "Отговорени"
request = "Обръщение"
response = "Отговор"
responses = "Отговори"
write_response = "Напиши отговор"
body = "Тяло на писмото"
save_draft = "Запази черновата"
send = "Изпрати отговор"
return_dialogs = "Върни се към списъка"
profile_look = "Премини към профила"
write_email = "Напиши писмо"
from = "от"
look = "Преглед"
set_replied = "Маркирай като отговорено"
marked_replied = "Маркирано като отговорено"
attach = "Прикачени"
respose_sent = "Отговорът е успешно изпратен"
cn_actions = "Действия"
cn_del_mail = "Сигурни ли сте, че желаете да изтриете този e-mail?"
cn_not_mail = "В тази форма няма писма ..."
cn_view = "Преглед на историята"
cn_status = "Статус на писмата"
cn_alias_not = " -- "
cn_count_messages = "писма: "
cn_copy_to_clipboard = "Копирай в буфера"
cn_return_list_form = "Връщане към списъка"
cn_mod_info = "Важно: модулът използва метода за изпращане на писма, установен в системните настройки "
cn_mod_info_a = "Настройки поща"
info_attr_name = "Значение атрибута name для этого поля:"
public_key_recaptcha_v3 = "Публичный ключ reCAPTCHA v3"
title_pub_key_recap = "Открытый ключ reCAPTCHA v3 указанный в системных настройках, используется на стороне клиента (например в js скриптах)"
found_key_recap_v3 = "В системных настройках обнаружены и будут использоваться модулем API ключи reCAPTCHA v3"
notfound_key_recap_v3_1 ="API ключи reCAPTCHA v3 не обнаружены."
notfound_key_recap_v3_2 =" Вы можете установить их в разделе "
notfound_key_recap_v3_3 ="Системные настройки"
demo_jqval_cap = "Без Ajax, с jQuery Validation Plugin и reCAPTCHA v3"
demo_ajax_jqval_cap = "Ajax, с jQuery Validation Plugin и reCAPTCHA v3"

187
contactsnew/lang/en.txt

@ -1,187 +0,0 @@
contacts = "Контакты New"
mod_info = "В данном разделе приведен список всех контактных форм. Вы можете, добавить новую форму или отредактировать существующую."
forms = "Список форм"
form = "Форма"
noforms = "В модуле пока нет ни одной контактной формы"
form_new = "Создать форму"
form_deleting = "Вы уверены, что хотите удалить форму?"
form_creating = "Создание новой формы"
form_notfound = "указанная форма не найдена"
form_editing = "Редактирование формы"
main_sets = "Основные параметры"
title = "Название"
alias = "Алиас"
protection = "Защита от повторной отправки"
protect_i = "Рекомендуется включать для форм без Ajax.&lt;br/&gt;&lt;br/&gt;Если защита включена, на финишной странице (после успешной отправки формы) при обновлении страницы пользователь не увидит сообщения &quot;Подтвердите повторную отправку данных...&quot;. Вместо этого загрузится заново чистая форма."
demo = "Создать пример формы"
demo_noajax = "без Ajax"
demo_ajax = "Ajax, сервер возвращает код формы"
demo_ajax_o = "Ajax, сервер возвращает результат валидации"
alias_i = "Опционально. Алиас формы позволяет использовать легко запоминающийся тег [mod_contact:alias] вместо [mod_contact:id]. Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание, иметь длину не более 20 символов и быть уникальным в пределах модуля"
alias_accept = "Этот алиас можно использовать"
alias_er_syn = "Неверный алиас!<br> Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание и иметь длину не более 20 символов"
alias_er_exists = "Неверный алиас!<br> Данный алиас уже привязан к другой контактной форме"
recs = "Получатели"
name = "Имя"
fields_sets = "Настройки полей"
active_i = "Активировать поле (если чекбокс пустой, тег в шаблоне будет заменён на пустую строку)"
type = "Тип"
doc = "Документ"
multidoc = "Документ (multi)"
other_input = "Другой input"
other_input_i = "Аттрибут type"
pattern_i = "Шаблон для preg_match<br/> <em>Пример:</em> <strong>/^[A-Za-z0-9]+$/ie</strong><br/><br/> Либо фильтр для filter_var<br/> <em>Пример:</em> <strong>FILTER_VALIDATE_EMAIL</strong>"
pattern = "Валидация"
defaultval = "По умолчанию"
sets = "Параметры"
attributes = "Аттрибуты тега поля"
field_add = "Добавить поле"
form_tpl = "Шаблон формы"
mail_tpl = "Шаблон письма"
finish_tpl = "Шаблон страницы после отправки формы"
conditions = "Условия"
rubheader = "Скрипты и стили, необходимые для оформления и функционирования формы"
rubheader_info = "Избегайте дублирования скриптов в модуле и шаблоне"
tag = "Тег"
field_creating = "Добавление поля..."
field_new_error = "Укажите название поля!"
type_i = "Для <strong>input</strong> в аттрибутах можно указать свой <strong>type</strong> (по умолчанию подставится <strong>text</strong>)"
fld_tpl_toggle = "Показать/свернуть шаблон вывода поля"
field_tpl = "Шаблон поля"
fld_del = "Вы уверены, что хотите удалить это поле?"
fld_deleting = "Удаление поля..."
required = "Обязательное поле"
setting_empty = "Сначала настройте опции для выбора (слева)"
yes = "да"
no = "нет"
fld_i = "Поле работает только если его тег вставлен в шаблон и слева стоит галочка активации"
copy_fld_i = "<strong>Отправка копии </strong> будет выполнена, даже если в значении по умолчанию стоит галка, а тег в шаблон не вставлен / поле не активировано"
select_req_i = "Селект будет считаться не заполненным, если выбран первый вариант"
file_size = "Макс. размер, мб"
file_size2 = "Ограничение размера файла, мб"
create = "Создать"
edit = "Редактировать"
copy = "Копировать"
delete = "Удалить"
actions = "Действия"
saved = "Сохранено"
notsaved = "Во время сохранения произошла ошибка"
created = "Форма успешно создана"
copied = "Форма успешно скопирована и сохранена<br>Отредактируйте название и алиас"
deleting = "Удаление..."
add_refresh = "Добавить и обновить"
save = "Сохранить"
return_to_forms = "Вернуться к списку контактных форм"
refresh = "Обновить"
mail_set = "Настройки письма"
format = "Формат"
text = "Текст"
from_email = "Email отправителя"
from_name = "Имя отправителя"
recs_main = "Главные получатели"
recs_main_i = "Эти адресаты получат письмо в любом случае"
subject_tpl = "Шаблон темы"
email_accept = "Правильный Email"
email_error = "Неверный синтаксис Email-а!"
tag_fld = "Тег поля, поле подставляется с использованием своего шаблона"
tag_fld_mail = "Значение поля, введённое пользователем"
tag_fld_tpl = "Тег поля, поле подставляется с подстановкой аттрибутов"
tag_attr = "Вставить основные аттрибуты"
tag_id = "Id поля"
tag_title = "Тег названия поля"
tag_valid = "Выведет контент, если поле соответствует заданному шаблону"
tag_invalid = "Выведет контент, если поле не соответствует заданному шаблону"
tag_nempty = "Выведет контент, если поле помечено как обязательное и пользователь ввёл данные"
tag_empty = "Выведет контент, если поле помечено как обязательное и пользователь не ввёл данные"
tag_path = "Корневой путь установки"
tag_media = "Путь до папки с шаблоном<br><br><i>Пример:</i> [tag:mediapath]images/logo.gif"
tag_css = "Сжимает несколько css-файлов в один. Возвращает путь.<br><b>FFF</b> - имена файлов через запятую<br><b>P</b> - путь к папке с файлами, не обязательно. По умолчанию - [tag:mediapath]css/<br><br><i>Пример:</i> href=&quot;[tag:css:reset.css,style.css]&quot;"
tag_js = "Сжимает несколько js-файлов в один. Возвращает путь.<br><b>FFF</b> - имена файлов через запятую<br><b>P</b> - путь к папке с файлами, не обязательно. По умолчанию - [tag:mediapath]js/<br><br><i>Пример:</i> href=&quot;[tag:js:common.js,main.js]&quot;"
tag_formtitle = "Название формы"
tag_formalias = "Алиас формы (или id, если алиас не назначен)"
tag_url = "URL текущей страницы"
tag_docid = "ID текущего документа"
tag_hide = "Тег, позволяющий скрыть контент для определенных групп пользователей<br><br><strong>Х</strong> - номер группы<br><strong>TEXT</strong> - текст, если доступ запрещён<br><br><em>Пример:</em> [tag:hide:2:Эта форма не для вас!][/tag:hide]"
tag_uemail = "Email пользователя (на основе данных из профиля, а не формы!)"
tag_uname = "И. Фамилия пользователя (на основе данных из профиля)"
tag_ufname = "Имя пользователя (на основе данных из профиля)"
tag_ulname = "Фамилия пользователя (на основе данных из профиля)"
tag_ulogin = "Логин пользователя (на основе данных из профиля)"
tag_if_fld = "Условие на значение поля. В теге используйте стандартные конструкции сравнения PHP/JS<br><br><em>Пример:</em><br>[tag:if_fld:15 == '1']<br>...<br>[tag:elseif_fld:15 > '2']<br>...<br>[tag:else_fld]<br>...<br>[/tag:if_fld]"
tag_f_valid = "Выведет контент, если все поля формы прошли валидацию"
tag_f_invalid = "Выведет контент, если хотя бы одно поле формы не прошло валидацию"
tag_easymail = "Быстро генерирует список всех значений полей, участвующих в шаблоне формы (вместо того, чтобы прописывать все теги вручную)"
tag_if_user = "Выведет контент в письме пользователю, заполнившему форму"
tag_if_admin = "Выведет контент в письме получателям-админам (&quot;главным получателям&quot; или адресату из поля &quot;получатель на выбор&quot;)"
tag_fld_subject = "Значение поля <strong>Тема</strong>"
tag_fld_email = "Значение поля <strong>Email</strong>"
tag_sitename = "Название сайта"
tag_sitehost = "Адрес сайта"
info_php_tags = "Доступен php и теги"
code = "Исполняемый код"
code_info = "Данные формы (валидация, шаблоны, получатели и т.д.) хранятся в переменной класса $this->form."
code_onsubmit = "Код, исполняемый сразу после отправки формы (до валидации)"
code_onvalidate = "Код, исполняемый после валидации формы"
code_onsend = "Код, исполняемый после отправки писем"
mfld_email = "Email"
mfld_subject = "Тема"
mfld_receivers = "Получатель на выбор"
mfld_captcha = "Капча"
mfld_copy = "Отправка копии"
tag_mail_empty = "не заполнено"
history = "История"
date = "Дата"
author = "Автор"
status = "Статус"
stat_new = "Новое"
list_new = "Новых"
stat_viewed = "Просмотрено"
list_viewed = "Просмотренных"
stat_replied = "Отвечено"
list_replied = "Отвеченных"
request = "Обращение"
response = "Ответ"
responses = "Ответы"
write_response = "Написать ответ"
body = "Тело письма"
save_draft = "Сохранить черновик"
send = "Отправить ответ"
return_dialogs = "Вернуться к списку обращений"
profile_look = "Перейти к профилю"
write_email = "Написать письмо"
from = "от"
look = "Посмотреть"
set_replied = "Пометить как отвеченное"
marked_replied = "Было отмечено как отвеченное"
attach = "Вложения"
respose_sent = "Ответ успешно отправлен"
cn_actions = "Действия"
cn_del_mail = "Вы уверены, что хотите удалить этот e-mail?"
cn_not_mail = "В этой форме нет писем..."
cn_view = "Просмотр истории"
cn_status = "Статус сообщений"
cn_alias_not = " -- "
cn_count_messages = "сообщений: "
cn_copy_to_clipboard = "Скопировать в буфер обмена"
cn_return_list_form = "Вернуться к списку форм"
cn_mod_info = "Важно: модуль использует метод отправки почты установленный в системных настройках, в разделе "
cn_mod_info_a = "Настройки почты."
info_attr_name = "Значение атрибута name для этого поля:"
public_key_recaptcha_v3 = "Публичный ключ reCAPTCHA v3"
title_pub_key_recap = "Открытый ключ reCAPTCHA v3 указанный в системных настройках, используется на стороне клиента (например в js скриптах)"
found_key_recap_v3 = "В системных настройках обнаружены и будут использоваться модулем API ключи reCAPTCHA v3"
notfound_key_recap_v3_1 ="API ключи reCAPTCHA v3 не обнаружены."
notfound_key_recap_v3_2 =" Вы можете установить их в разделе "
notfound_key_recap_v3_3 ="Системные настройки"
demo_jqval_cap = "Без Ajax, с jQuery Validation Plugin и reCAPTCHA v3"
demo_ajax_jqval_cap = "Ajax, с jQuery Validation Plugin и reCAPTCHA v3"

8
contactsnew/lang/index.php

@ -1,8 +0,0 @@
<?php
/**
* Файл-заглушка, предназначенный для запрета показа списка файлов в текущей директории,
* если через адресную строку браузера было прямое общращение к данной директории.
*/
header('Location:/');
exit;
?>

187
contactsnew/lang/ua.txt

@ -1,187 +0,0 @@
contacts = "Контакты New"
mod_info = "В данном разделе приведен список всех контактных форм. Вы можете, добавить новую форму или отредактировать существующую."
forms = "Список форм"
form = "Форма"
noforms = "В модуле пока нет ни одной контактной формы"
form_new = "Создать форму"
form_deleting = "Вы уверены, что хотите удалить форму?"
form_creating = "Создание новой формы"
form_notfound = "указанная форма не найдена"
form_editing = "Редактирование формы"
main_sets = "Основные параметры"
title = "Название"
alias = "Алиас"
protection = "Защита от повторной отправки"
protect_i = "Рекомендуется включать для форм без Ajax.&lt;br/&gt;&lt;br/&gt;Если защита включена, на финишной странице (после успешной отправки формы) при обновлении страницы пользователь не увидит сообщения &quot;Подтвердите повторную отправку данных...&quot;. Вместо этого загрузится заново чистая форма."
demo = "Создать пример формы"
demo_noajax = "без Ajax"
demo_ajax = "Ajax, сервер возвращает код формы"
demo_ajax_o = "Ajax, сервер возвращает результат валидации"
alias_i = "Опционально. Алиас формы позволяет использовать легко запоминающийся тег [mod_contact:alias] вместо [mod_contact:id]. Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание, иметь длину не более 20 символов и быть уникальным в пределах модуля"
alias_accept = "Этот алиас можно использовать"
alias_er_syn = "Неверный алиас!<br> Алиас не должен являться числом, может содержать только цифры, латинские буквы, дефис, подчёркивание и иметь длину не более 20 символов"
alias_er_exists = "Неверный алиас!<br> Данный алиас уже привязан к другой контактной форме"
recs = "Получатели"
name = "Имя"
fields_sets = "Настройки полей"
active_i = "Активировать поле (если чекбокс пустой, тег в шаблоне будет заменён на пустую строку)"
type = "Тип"
doc = "Документ"
multidoc = "Документ (multi)"
other_input = "Другой input"
other_input_i = "Аттрибут type"
pattern_i = "Шаблон для preg_match<br/> <em>Пример:</em> <strong>/^[A-Za-z0-9]+$/ie</strong><br/><br/> Либо фильтр для filter_var<br/> <em>Пример:</em> <strong>FILTER_VALIDATE_EMAIL</strong>"
pattern = "Валидация"
defaultval = "По умолчанию"
sets = "Параметры"
attributes = "Аттрибуты тега поля"
field_add = "Добавить поле"
form_tpl = "Шаблон формы"
mail_tpl = "Шаблон письма"
finish_tpl = "Шаблон страницы после отправки формы"
conditions = "Условия"
rubheader = "Скрипты и стили, необходимые для оформления и функционирования формы"
rubheader_info = "Избегайте дублирования скриптов в модуле и шаблоне"
tag = "Тег"
field_creating = "Добавление поля..."
field_new_error = "Укажите название поля!"
type_i = "Для <strong>input</strong> в аттрибутах можно указать свой <strong>type</strong> (по умолчанию подставится <strong>text</strong>)"
fld_tpl_toggle = "Показать/свернуть шаблон вывода поля"
field_tpl = "Шаблон поля"
fld_del = "Вы уверены, что хотите удалить это поле?"
fld_deleting = "Удаление поля..."
required = "Обязательное поле"
setting_empty = "Сначала настройте опции для выбора (слева)"
yes = "да"
no = "нет"
fld_i = "Поле работает только если его тег вставлен в шаблон и слева стоит галочка активации"
copy_fld_i = "<strong>Отправка копии </strong> будет выполнена, даже если в значении по умолчанию стоит галка, а тег в шаблон не вставлен / поле не активировано"
select_req_i = "Селект будет считаться не заполненным, если выбран первый вариант"
file_size = "Макс. размер, мб"
file_size2 = "Ограничение размера файла, мб"
create = "Создать"
edit = "Редактировать"
copy = "Копировать"
delete = "Удалить"
actions = "Действия"
saved = "Сохранено"
notsaved = "Во время сохранения произошла ошибка"
created = "Форма успешно создана"
copied = "Форма успешно скопирована и сохранена<br>Отредактируйте название и алиас"
deleting = "Удаление..."
add_refresh = "Добавить и обновить"
save = "Сохранить"
return_to_forms = "Вернуться к списку контактных форм"
refresh = "Обновить"
mail_set = "Настройки письма"
format = "Формат"
text = "Текст"
from_email = "Email отправителя"
from_name = "Имя отправителя"
recs_main = "Главные получатели"
recs_main_i = "Эти адресаты получат письмо в любом случае"
subject_tpl = "Шаблон темы"
email_accept = "Правильный Email"
email_error = "Неверный синтаксис Email-а!"
tag_fld = "Тег поля, поле подставляется с использованием своего шаблона"
tag_fld_mail = "Значение поля, введённое пользователем"
tag_fld_tpl = "Тег поля, поле подставляется с подстановкой аттрибутов"
tag_attr = "Вставить основные аттрибуты"
tag_id = "Id поля"
tag_title = "Тег названия поля"
tag_valid = "Выведет контент, если поле соответствует заданному шаблону"
tag_invalid = "Выведет контент, если поле не соответствует заданному шаблону"
tag_nempty = "Выведет контент, если поле помечено как обязательное и пользователь ввёл данные"
tag_empty = "Выведет контент, если поле помечено как обязательное и пользователь не ввёл данные"
tag_path = "Корневой путь установки"
tag_media = "Путь до папки с шаблоном<br><br><i>Пример:</i> [tag:mediapath]images/logo.gif"
tag_css = "Сжимает несколько css-файлов в один. Возвращает путь.<br><b>FFF</b> - имена файлов через запятую<br><b>P</b> - путь к папке с файлами, не обязательно. По умолчанию - [tag:mediapath]css/<br><br><i>Пример:</i> href=&quot;[tag:css:reset.css,style.css]&quot;"
tag_js = "Сжимает несколько js-файлов в один. Возвращает путь.<br><b>FFF</b> - имена файлов через запятую<br><b>P</b> - путь к папке с файлами, не обязательно. По умолчанию - [tag:mediapath]js/<br><br><i>Пример:</i> href=&quot;[tag:js:common.js,main.js]&quot;"
tag_formtitle = "Название формы"
tag_formalias = "Алиас формы (или id, если алиас не назначен)"
tag_url = "URL текущей страницы"
tag_docid = "ID текущего документа"
tag_hide = "Тег, позволяющий скрыть контент для определенных групп пользователей<br><br><strong>Х</strong> - номер группы<br><strong>TEXT</strong> - текст, если доступ запрещён<br><br><em>Пример:</em> [tag:hide:2:Эта форма не для вас!][/tag:hide]"
tag_uemail = "Email пользователя (на основе данных из профиля, а не формы!)"
tag_uname = "И. Фамилия пользователя (на основе данных из профиля)"
tag_ufname = "Имя пользователя (на основе данных из профиля)"
tag_ulname = "Фамилия пользователя (на основе данных из профиля)"
tag_ulogin = "Логин пользователя (на основе данных из профиля)"
tag_if_fld = "Условие на значение поля. В теге используйте стандартные конструкции сравнения PHP/JS<br><br><em>Пример:</em><br>[tag:if_fld:15 == '1']<br>...<br>[tag:elseif_fld:15 > '2']<br>...<br>[tag:else_fld]<br>...<br>[/tag:if_fld]"
tag_f_valid = "Выведет контент, если все поля формы прошли валидацию"
tag_f_invalid = "Выведет контент, если хотя бы одно поле формы не прошло валидацию"
tag_easymail = "Быстро генерирует список всех значений полей, участвующих в шаблоне формы (вместо того, чтобы прописывать все теги вручную)"
tag_if_user = "Выведет контент в письме пользователю, заполнившему форму"
tag_if_admin = "Выведет контент в письме получателям-админам (&quot;главным получателям&quot; или адресату из поля &quot;получатель на выбор&quot;)"
tag_fld_subject = "Значение поля <strong>Тема</strong>"
tag_fld_email = "Значение поля <strong>Email</strong>"
tag_sitename = "Название сайта"
tag_sitehost = "Адрес сайта"
info_php_tags = "Доступен php и теги"
code = "Исполняемый код"
code_info = "Данные формы (валидация, шаблоны, получатели и т.д.) хранятся в переменной класса $this->form."
code_onsubmit = "Код, исполняемый сразу после отправки формы (до валидации)"
code_onvalidate = "Код, исполняемый после валидации формы"
code_onsend = "Код, исполняемый после отправки писем"
mfld_email = "Email"
mfld_subject = "Тема"
mfld_receivers = "Получатель на выбор"
mfld_captcha = "Капча"
mfld_copy = "Отправка копии"
tag_mail_empty = "не заполнено"
history = "История"
date = "Дата"
author = "Автор"
status = "Статус"
stat_new = "Новое"
list_new = "Новых"
stat_viewed = "Просмотрено"
list_viewed = "Просмотренных"
stat_replied = "Отвечено"
list_replied = "Отвеченных"
request = "Обращение"
response = "Ответ"
responses = "Ответы"
write_response = "Написать ответ"
body = "Тело письма"
save_draft = "Сохранить черновик"
send = "Отправить ответ"
return_dialogs = "Вернуться к списку обращений"
profile_look = "Перейти к профилю"
write_email = "Написать письмо"
from = "от"
look = "Посмотреть"
set_replied = "Пометить как отвеченное"
marked_replied = "Было отмечено как отвеченное"
attach = "Вложения"
respose_sent = "Ответ успешно отправлен"
cn_actions = "Действия"
cn_del_mail = "Вы уверены, что хотите удалить этот e-mail?"
cn_not_mail = "В этой форме нет писем..."
cn_view = "Просмотр истории"
cn_status = "Статус сообщений"
cn_alias_not = " -- "
cn_count_messages = "сообщений: "
cn_copy_to_clipboard = "Скопировать в буфер обмена"
cn_return_list_form = "Вернуться к списку форм"
cn_mod_info = "Важно: модуль использует метод отправки почты установленный в системных настройках, в разделе "
cn_mod_info_a = "Настройки почты."
info_attr_name = "Значение атрибута name для этого поля:"
public_key_recaptcha_v3 = "Публичный ключ reCAPTCHA v3"
title_pub_key_recap = "Открытый ключ reCAPTCHA v3 указанный в системных настройках, используется на стороне клиента (например в js скриптах)"
found_key_recap_v3 = "В системных настройках обнаружены и будут использоваться модулем API ключи reCAPTCHA v3"
notfound_key_recap_v3_1 ="API ключи reCAPTCHA v3 не обнаружены."
notfound_key_recap_v3_2 =" Вы можете установить их в разделе "
notfound_key_recap_v3_3 ="Системные настройки"
demo_jqval_cap = "Без Ajax, с jQuery Validation Plugin и reCAPTCHA v3"
demo_ajax_jqval_cap = "Ajax, с jQuery Validation Plugin и reCAPTCHA v3"

166
contactsnew/module.php

@ -1,166 +0,0 @@
<?php
/**
* Модуль "Контакты New"
*
* @package AVE.cms
* @subpackage module: ContactsNew
* @since 1.4
* @author vudaltsov
* @filesource
*/
if(!defined('BASE_DIR')) exit;
if (defined('ACP'))
{
$modul['ModuleName'] = 'Контакты New';
$modul['ModuleSysName'] = 'contactsnew';
$modul['ModuleVersion'] = '1.2.6';
$modul['ModuleDescription'] = 'Данный модуль предназначен для создания веб-форм (например, обратной связи или простейшего оформления заказа), которые могут состоять из любого набора полей. Для вывода в публичной части сайта используйте тег <strong>[mod_contactsnew:XXX]</strong>, где XXX - это id или алиас формы.';
$modul['ModuleAutor'] = 'vudaltsov UPD Repellent';
$modul['ModuleCopyright'] = '&copy; 2007-2019 AVE.CMS Team';
$modul['ModuleIsFunction'] = 1;
$modul['ModuleAdminEdit'] = 1;
$modul['ModuleFunction'] = 'mod_contactsnew';
$modul['ModuleTag'] = '[mod_contactsnew:alias/id:email]';
$modul['ModuleTagLink'] = null;
$modul['ModuleAveTag'] = '#\\\[mod_contactsnew:([A-Za-z0-9-_]{1,20})]#';
$modul['ModulePHPTag'] = "<?php mod_contactsnew(''$1''); ?>";
}
/**
* Тег
*/
function mod_contactsnew($alias_id)
{
global $AVE_Template;
require_once(BASE_DIR . '/modules/contactsnew/class.contactsnew.php');
$contactsnew = new ContactsNew;
$contactsnew->tpl_dir = BASE_DIR . '/modules/contactsnew/templates/';
$lang_file = BASE_DIR . '/modules/contactsnew/lang/' . $_SESSION['user_language'] . '.txt';
$AVE_Template->config_load($lang_file);
echo $contactsnew->form_display($alias_id);
}
/**
* AJAX-методы
*/
if (! defined('ACP') && isset($_REQUEST['module']) && $_REQUEST['module'] == 'contactsnew')
{
global $AVE_Template;
$alias_id = $_REQUEST['alias_id'];
require_once(BASE_DIR . '/modules/contactsnew/class.contactsnew.php');
$contactsnew = new ContactsNew;
$contactsnew->tpl_dir = BASE_DIR . '/modules/contactsnew/templates/';
$lang_file = BASE_DIR . '/modules/contactsnew/lang/' . $_SESSION['user_language'] . '.txt';
$AVE_Template->config_load($lang_file);
switch($_REQUEST['action'])
{
case '':
case 'full':
exit ($contactsnew->form_display($alias_id));
case 'validate':
$contactsnew->form_display($alias_id);
$contactsnew->_json($contactsnew->form['ajax'], true);
}
}
/**
* Админка
*/
if (defined('ACP') && isset($_REQUEST['mod']) && $_REQUEST['mod'] == 'contactsnew' && !empty($_REQUEST['moduleaction']))
{
$fid = !empty($_REQUEST['fid']) ? (int)$_REQUEST['fid'] : 0;
require_once(BASE_DIR . '/modules/contactsnew/class.contactsnew.php');
$contactsnew = new ContactsNew;
$contactsnew->tpl_dir = BASE_DIR . '/modules/contactsnew/templates/';
$lang_file = BASE_DIR . '/modules/contactsnew/lang/' . $_SESSION['admin_language'] . '.txt';
$AVE_Template->config_load($lang_file);
// создаём переменные с версией движка
$ave14 = ((float)str_replace(',', '.', APP_VERSION) < 1.5);
$AVE_Template->assign('ave14', $ave14);
$AVE_Template->assign('ave15', !$ave14);
switch($_REQUEST['moduleaction'])
{
case '1':
$contactsnew->forms_list();
break;
case 'form_edit':
$response = $contactsnew->form_edit($fid);
break;
case 'form_save':
$response = $contactsnew->form_save($fid);
// если передан запрос на обновление полей, передаём tpl
if (isset($_REQUEST['fields_reload']) && $_REQUEST['fields_reload'] == 1)
{
exit ($contactsnew->form_fields_fetch());
}
break;
case 'form_del':
$contactsnew->form_del($fid);
header('Location: index.php?do=modules&action=modedit&mod=contactsnew&moduleaction=1&cp=' . SESSION);
exit;
case 'form_copy':
$fid_new = $contactsnew->form_copy($fid);
$_SESSION['module_contactsnew_admin'][$fid_new]['edit_alert'] = array('text' => 'copied', 'theme' => 'accept');
header('Location: index.php?do=modules&action=modedit&mod=contactsnew&moduleaction=form_edit&fid=' . $fid_new . '&cp=' . SESSION);
exit;
case 'email_validate':
$response = (int)$contactsnew->_email_validate($_REQUEST['email']);
break;
case 'alias_validate':
$response = $contactsnew->_alias_validate($_REQUEST['alias'],$fid);
$response = ($response === 'syn') ? 'syn' : (int)$response;
break;
case 'history_list':
$contactsnew->history_list($fid);
break;
case 'email_del':
$hid = !empty($_REQUEST['hid']) ? (int)$_REQUEST['hid'] : 0;
$contactsnew->email_del($hid);
$fid = !empty($_REQUEST['fid']) ? (int)$_REQUEST['fid'] : 0;
header('Location: index.php?do=modules&action=modedit&mod=contactsnew&moduleaction=history_list&fid=' . $fid . '&cp=' . SESSION);
exit;
case 'history_dialog':
$hid = !empty($_REQUEST['hid']) ? (int)$_REQUEST['hid'] : 0;
$contactsnew->history_dialog($hid);
break;
case 'history_dialog_submit':
$hid = !empty($_REQUEST['hid']) ? (int)$_REQUEST['hid'] : 0;
$contactsnew->history_dialog_submit($hid);
break;
case 'dialog_status':
$hid = !empty($_REQUEST['hid']) ? (int)$_REQUEST['hid'] : 0;
$contactsnew->dialog_status($hid);
break;
}
if ($_REQUEST['ajax']) exit((string)$response);
}
?>

133
contactsnew/sql.php

@ -1,133 +0,0 @@
<?php
/**
* Модуль "Контакты New"
*
* @package AVE.cms
* @subpackage module: ContactsNew
* @since 1.4 - 1.5
* @author vudaltsov UPD Repellent
* @filesource
*/
$module_sql_install = array();
$module_sql_deinstall = array();
$module_sql_update = array();
// Удаление
$module_sql_deinstall[] = "DROP TABLE IF EXISTS CPPREFIX_module_contactsnew_forms;";
$module_sql_deinstall[] = "DROP TABLE IF EXISTS CPPREFIX_module_contactsnew_fields;";
$module_sql_deinstall[] = "DROP TABLE IF EXISTS CPPREFIX_module_contactsnew_history;";
// Установка
$module_sql_install[] = "
CREATE TABLE IF NOT EXISTS `CPPREFIX_module_contactsnew_forms` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`alias` varchar(20) NOT NULL,
`title` varchar(255) NOT NULL,
`protection` enum('0','1') NOT NULL DEFAULT '1',
`rubheader` text NOT NULL,
`form_tpl` text NOT NULL,
`mail_set` text NOT NULL,
`mail_tpl` text NOT NULL,
`finish_tpl` text NOT NULL,
`code_onsubmit` text NOT NULL,
`code_onvalidate` text NOT NULL,
`code_onsend` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1;
";
$module_sql_install[] = "
CREATE TABLE IF NOT EXISTS `CPPREFIX_module_contactsnew_fields` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`form_id` int(10) NOT NULL,
`active` enum('0','1') NOT NULL DEFAULT '1',
`title` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
`main` enum('0','1') NOT NULL DEFAULT '0',
`setting` text NOT NULL,
`required` enum('0','1') NOT NULL DEFAULT '0',
`defaultval` varchar(255) NOT NULL,
`attributes` text NOT NULL,
`tpl` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1;
";
$module_sql_install[] = "
CREATE TABLE IF NOT EXISTS `CPPREFIX_module_contactsnew_history` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`form_id` int(10) NOT NULL,
`email` varchar(255) NOT NULL,
`subject` varchar(255) NOT NULL,
`status` enum('new','viewed','replied') NOT NULL DEFAULT 'new',
`date` int(10) NOT NULL,
`dialog` longtext NOT NULL,
`postdata` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1;
";
// Обновление
$module_sql_update[] = "
UPDATE `CPPREFIX_module`
SET
ModuleAveTag = '" . $modul['ModuleAveTag'] . "',
ModulePHPTag = '" . $modul['ModulePHPTag'] . "',
ModuleVersion = '" . $modul['ModuleVersion'] . "'
WHERE
ModuleSysName = '" . $modul['ModuleSysName'] . "'
LIMIT 1;
";
// beta 3
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_forms`
ADD IF NOT EXISTS `code_onsubmit` text NOT NULL
AFTER `finish_tpl`";
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_forms`
ADD IF NOT EXISTS `code_onvalidate` text NOT NULL
AFTER `code_onsubmit`";
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_forms`
ADD IF NOT EXISTS `code_onsend` text NOT NULL
AFTER `code_onvalidate`";
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_forms`
DROP INDEX IF EXISTS `alias`";
// beta 8
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_fields`
ADD IF NOT EXISTS `active` enum('0','1') NOT NULL DEFAULT '1'
AFTER `form_id`";
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_fields`
DROP IF EXISTS `position`";
// v1.1 beta 1
$module_sql_update[] = "
CREATE TABLE IF NOT EXISTS `CPPREFIX_module_contactsnew_history` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`form_id` int(10) NOT NULL,
`email` varchar(255) NOT NULL,
`subject` varchar(255) NOT NULL,
`status` enum('new','viewed','replied') NOT NULL DEFAULT 'new',
`date` int(10) NOT NULL,
`dialog` longtext NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1;
";
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_forms`
ADD IF NOT EXISTS `protection` enum('0','1') NOT NULL DEFAULT '1'
AFTER `title`";
// v1.1 beta 2
$module_sql_update[] = "
ALTER TABLE `CPPREFIX_module_contactsnew_history`
ADD IF NOT EXISTS`postdata` text NOT NULL
AFTER `dialog`";
?>