diff --git a/frontend/config/main.php b/frontend/config/main.php
index 731e9c9..dbf192e 100755
--- a/frontend/config/main.php
+++ b/frontend/config/main.php
@@ -137,7 +137,8 @@
}',
],
'contact' => [
- 'class' => 'frontend\views\forms\ContactModule',
+ 'class' => 'frontend\modules\forms\Module',
+ #'class' => 'artbox\core\forms\Module',
'activeRecord' => "frontend\models\Feedback",
'templateForm' => '
{form}
',
'attributes' => [
diff --git a/frontend/models/Feedback.php b/frontend/models/Feedback.php
index ee2e970..56c6171 100644
--- a/frontend/models/Feedback.php
+++ b/frontend/models/Feedback.php
@@ -37,7 +37,8 @@ class Feedback extends ArtboxCoreFeedback
],
- [
+
+ [
[
'name',
'email',
diff --git a/frontend/modules/forms/DynamicModel.php b/frontend/modules/forms/DynamicModel.php
new file mode 100755
index 0000000..5506e10
--- /dev/null
+++ b/frontend/modules/forms/DynamicModel.php
@@ -0,0 +1,34 @@
+_labels = $labels;
+ }
+
+ /**
+ * @param string $name
+ *
+ * @return string
+ */
+ public function getAttributeLabel($name)
+ {
+ return $this->_labels[$name] ?? $name;
+ }
+}
\ No newline at end of file
diff --git a/frontend/modules/forms/Module.php b/frontend/modules/forms/Module.php
new file mode 100755
index 0000000..b259c4b
--- /dev/null
+++ b/frontend/modules/forms/Module.php
@@ -0,0 +1,83 @@
+ajax) {
+ $js = <<formId}', function(e) {
+ e.preventDefault();
+ e.stopImmediatePropagation();
+ $.post(
+ $(this).attr("action"), $(this).serialize(), {$this->successCallback}).fail({$this->errorCallback});
+});
+JS;
+
+ $view->registerJs($js, View::POS_READY);
+ }
+ /**
+ * @var ActiveForm $form
+ */
+
+ $form = ActiveForm::begin(
+ [
+ 'id' => $this->formId,
+ 'action' => ($this->ajax) ? '/save/ajax' : '/' . $this->id . '/save/no-ajax',
+ 'class' => $this->classForm,
+ ]
+ );
+ $content = '';
+ foreach ($this->attributes as $field) {
+
+ # если мы присвоили этому полю тип, то он его отрисовывает
+ if (isset($this->inputOptions[$field]['type'])) {
+ $function = $this->inputOptions[$field]['type'];
+ $formStr = $form->field($this->model, $field)
+ ->$function(
+ isset($this->inputOptions[$field]['options'])
+ ? $this->inputOptions[$field]['options'] : []
+ );
+ } # а если нет, то просто добавляет поле
+ else {
+ $formStr = $form->field($this->model, $field);
+ }
+ if (isset($this->labels[$field])) {
+ $formStr->label(\Yii::t($this->locale, $this->labels[$field]));
+ }
+ if (isset($this->inputOptions[$field]['template'])) {
+
+ $formStr = str_replace('{input}', $formStr, $this->inputOptions[$field]['template']);
+ }
+ $content .= $formStr;
+
+ }
+
+ $content .= $form->field($this->model, 'reCaptcha')->widget(\sashsvamir\yii2\recaptcha\ReCaptcha::className())->label(false);
+
+
+ $content .= str_replace('{button}', Html::submitButton(\Yii::t($this->locale, $this->buttonContent), $this->buttonOptions), $this->buttonTemplate);
+ $content = str_replace('{form}', $content, $this->templateForm);
+ echo $content;
+ ActiveForm::end();
+ }
+}
\ No newline at end of file
diff --git a/frontend/modules/forms/controllers/SaveController.php b/frontend/modules/forms/controllers/SaveController.php
new file mode 100755
index 0000000..108b5c1
--- /dev/null
+++ b/frontend/modules/forms/controllers/SaveController.php
@@ -0,0 +1,103 @@
+request->referrer;
+ $model = $this->module->model;
+ if (\Yii::$app->request->isPost and $model->load(\Yii::$app->request->post())) {
+ if ($model instanceof DynamicModel) {
+ $this->sendEmail($model);
+ } else {
+ if ($model->save()) {
+ if ($this->module->sendEmail) {
+ $this->sendEmail($model);
+ return $this->redirect($returnUrl);
+ }
+ } else {
+ return false;
+ }
+ }
+ return $this->redirect($returnUrl);
+
+ }
+ return $this->redirect($returnUrl);
+ }
+
+ /**
+ * Action that saves data submited via AJAX
+ *
+ * @return array
+ * @throws \yii\base\InvalidConfigException
+ */
+ public function actionAjax()
+ {
+ \Yii::$app->response->format = Response::FORMAT_JSON;
+ $model = $this->module->model;
+ if (\Yii::$app->request->isPost and $model->load(\Yii::$app->request->post())) {
+ if ($model instanceof DynamicModel) {
+ $this->sendEmail($model);
+ return ['status' => 'success'];
+ } else {
+ if ($model->save()) {
+ if ($this->module->sendEmail) {
+ $this->sendEmail($model);
+ return ['status' => 'success'];
+ }
+ return ['status' => 'success'];
+ } else {
+ return ['status' => 'error'];
+ }
+ }
+
+ }
+ return ['status' => 'error'];
+ }
+
+ /**
+ * @param $model
+ *
+ * @return bool
+ * @throws \yii\base\InvalidConfigException
+ */
+ public function sendEmail($model)
+ {
+
+ if ($this->module->mailer == null) {
+ $mailer = \Yii::$app->mailer;
+ } else {
+ $mailer = \Yii::$app->get($this->module->mailer);
+ }
+ return $mailer->compose(
+ [
+ 'html' => $this->module->emailFile,
+ 'text' => $this->module->emailFile,
+ ],
+ [$model]
+ )
+ ->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name . ' robot'])
+ ->setTo($this->module->email)
+ ->setSubject($this->module->subject)
+ ->send();
+ }
+
+}
\ No newline at end of file
diff --git a/frontend/modules/forms/views/form/form.php b/frontend/modules/forms/views/form/form.php
new file mode 100755
index 0000000..db9dccd
--- /dev/null
+++ b/frontend/modules/forms/views/form/form.php
@@ -0,0 +1,26 @@
+ 'dynamic-form']);
+foreach ($this->context->module->attributes as $field) {
+ if (isset($types[$field])) {
+ $function = $types[$field]['type'];
+ echo $form->field($model, $field)
+ ->$function(
+ $types[$field]['options']
+ );
+ } else {
+ echo $form->field($model, $field);
+ }
+
+}
+
+echo Html::submitButton();
+
+$form = ActiveForm::end();
--
libgit2 0.21.4