diff --git a/controllers/AdminFormSendMessageController.php b/controllers/AdminFormSendMessageController.php index 9c605e2..2baa013 100644 --- a/controllers/AdminFormSendMessageController.php +++ b/controllers/AdminFormSendMessageController.php @@ -31,9 +31,27 @@ class AdminFormSendMessageController extends AdminModelEditorSmartController $this->enableScenarios = true; $this->gridColumns = [ - 'form_id', + [ + 'class' => \yii\grid\DataColumn::className(), + 'value' => function(FormSendMessage $model) + { + + if ($form = Form::find()->where(['id' => $model->form_id])->one()) + { + return $form->name; + } + + }, + 'attribute' => 'form_id', + 'format' => 'html' + ], + ['class' => \skeeks\cms\grid\CreatedAtColumn::className()], - ['class' => \skeeks\cms\grid\CreatedByColumn::className()] + ['class' => \skeeks\cms\grid\CreatedByColumn::className()], + 'page_url', + 'ip' + + ]; parent::init(); diff --git a/controllers/BackendController.php b/controllers/BackendController.php index d67c3aa..fd1e808 100644 --- a/controllers/BackendController.php +++ b/controllers/BackendController.php @@ -8,6 +8,7 @@ namespace skeeks\modules\cms\form\controllers; use skeeks\cms\base\Controller; use skeeks\modules\cms\form\models\Form; +use skeeks\modules\cms\form\models\FormField; use skeeks\modules\cms\form\models\FormSendMessage; use yii\filters\VerbFilter; use yii\helpers\ArrayHelper; @@ -67,14 +68,16 @@ class BackendController extends Controller //Все проверки прошли, формируем модель отправленного сообщения и сохраняем ее $modelFormSendMessage = new FormSendMessage(); + $modelFormSendMessage->data_values = $model->attributeValues(); + $modelFormSendMessage->data_labels = $model->attributeLabels(); - - $modelFormSendMessage->data = $model->getValues(); $modelFormSendMessage->page_url = \Yii::$app->request->referrer; $modelFormSendMessage->form_id = $formId; if ($modelFormSendMessage->save()) { + $modelFormSendMessage->notify(); + $response['success'] = true; $response['message'] = 'Успешно отправлена'; } else diff --git a/mail/send-message.php b/mail/send-message.php new file mode 100644 index 0000000..58ca869 --- /dev/null +++ b/mail/send-message.php @@ -0,0 +1,48 @@ + + * @link http://skeeks.com/ + * @copyright 2010 SkeekS (СкикС) + * @date 19.03.2015 + */ +use skeeks\cms\mail\helpers\Html; +/** + * @var $formSendMessage \skeeks\modules\cms\form\models\FormSendMessage + * @var $form \skeeks\modules\cms\form\models\Form + * @var $formField \skeeks\modules\cms\form\models\FormField + */ +?> + + Отправка формы «name)?>» #id; ?> + + + + Форма была заполнена и успешно отправлена со страницы: page_url, $formSendMessage->page_url); ?>
+ Дата и время отправки: formatter->asDatetime($formSendMessage->created_at) ?>
+ Уникальный номер сообщения: id; ?> + + + + Данные формы: + + + +fields() as $formField) : ?> + data_values, $formField->attribute)) : ?> + + normalName() ?>: + + +
+ + + + + + + Дополнительная информация: + + + + Дополнительные данные по данному сообщению можно посмотреть $formSendMessage->id])->enableAdmin()->enableAbsolute()->toString()); ?>. + \ No newline at end of file diff --git a/migrations/m150307_162740_create_form_send_messages_table.php b/migrations/m150307_162740_create_form_send_messages_table.php index e48fa42..3c281d4 100644 --- a/migrations/m150307_162740_create_form_send_messages_table.php +++ b/migrations/m150307_162740_create_form_send_messages_table.php @@ -34,7 +34,8 @@ class m150307_162740_create_form_send_messages_table extends Migration 'processed_by' => Schema::TYPE_INTEGER . ' NULL', //пользователь который принял заявку - 'data' => Schema::TYPE_TEXT . ' NULL', //Данные с формы в серилизованном виде + 'data_values' => Schema::TYPE_TEXT . ' NULL', //Данные с формы в серилизованном виде + 'data_labels' => Schema::TYPE_TEXT . ' NULL', //Данные с формы в серилизованном виде 'emails' => Schema::TYPE_TEXT . ' NULL', //email на которые были отправлены уведомления 'phones' => Schema::TYPE_TEXT . ' NULL', //Телефоны на которые были отправлены уведомления diff --git a/models/Form.php b/models/Form.php index c01cafc..5657b8a 100644 --- a/models/Form.php +++ b/models/Form.php @@ -94,7 +94,7 @@ class Form extends Core /** * @return \yii\db\ActiveQuery */ - public function getFormEmails() + public function findFormEmails() { return $this->hasMany(FormEmail::className(), ['form_id' => 'id']); } diff --git a/models/FormField.php b/models/FormField.php index 2eb59e8..efec303 100644 --- a/models/FormField.php +++ b/models/FormField.php @@ -215,8 +215,21 @@ class FormField extends Core } + /** + * @return string + */ public function normalName() { - return $this-> + if ($this->name) + { + return (string) $this->name; + } + + if ($this->label) + { + return (string) $this->label; + } + + return (string) $this->attribute; } } \ No newline at end of file diff --git a/models/FormSendMessage.php b/models/FormSendMessage.php index 176dc9e..aaaee4f 100644 --- a/models/FormSendMessage.php +++ b/models/FormSendMessage.php @@ -15,6 +15,8 @@ use skeeks\cms\models\behaviors\HasStatus; use skeeks\cms\models\behaviors\Implode; use skeeks\cms\models\behaviors\Serialize; use skeeks\cms\models\Core; +use yii\helpers\ArrayHelper; +use yii\helpers\Html; /** * This is the model class for table "{{%form_send_message}}". @@ -64,7 +66,7 @@ class FormSendMessage extends Core Serialize::className() => [ 'class' => Serialize::className(), - 'fields' => ['data', 'data_server', 'data_session', 'data_cookie', 'additional_data', 'data_request'] + 'fields' => ['data_labels', 'data_values', 'data_server', 'data_session', 'data_cookie', 'additional_data', 'data_request'] ], Implode::className() => @@ -82,7 +84,7 @@ class FormSendMessage extends Core { return array_merge(parent::rules(), [ [['created_by', 'updated_by', 'created_at', 'updated_at', 'processed_by', 'status', 'form_id'], 'integer'], - [['data', 'emails', 'phones', 'email_message', 'phone_message', 'data_server', 'data_session', 'data_cookie', 'data_request', 'additional_data'], 'safe'], + [['emails', 'phones', 'email_message', 'phone_message', 'data_server', 'data_session', 'data_cookie', 'data_request', 'additional_data', 'data_labels', 'data_values'], 'safe'], [['ip'], 'string', 'max' => 32], [['page_url'], 'string', 'max' => 500], [['form_id'], 'required'], @@ -148,8 +150,45 @@ class FormSendMessage extends Core /** * @return \yii\db\ActiveQuery */ - public function getForm() + public function findForm() { - return $this->hasOne(FormForm::className(), ['id' => 'form_id']); + return $this->hasOne(Form::className(), ['id' => 'form_id']); + } + + + + /** + * Уведомить всех кого надо и как надо + */ + public function notify() + { + /** + * @var Form $form + */ + $form = $this->findForm()->one(); + + if ($form) + { + $emails = $form->findFormEmails()->all(); + + if ($emails) + { + foreach ($emails as $formEmail) + { + //\Yii::$app->mailer->setViewPath(\Yii::$app->getModule('form')->basePath . '/mail'); + + + \Yii::$app->mailer->compose('@skeeks/modules/cms/form/mail/send-message', [ + 'form' => $form, + 'formSendMessage' => $this + ]) + ->setFrom([\Yii::$app->params['supportEmail'] => \Yii::$app->name]) + ->setTo($formEmail->value) + ->setSubject("Отправка формы «{$form->name}» #" . $this->id) + ->send(); + + } + } + } } } \ No newline at end of file diff --git a/models/FormValidateModel.php b/models/FormValidateModel.php index b21a6f6..e5d576e 100644 --- a/models/FormValidateModel.php +++ b/models/FormValidateModel.php @@ -52,7 +52,7 @@ class FormValidateModel extends Model /** * @return array */ - public function getValues() + public function attributeValues() { $result = parent::rules(); @@ -66,26 +66,7 @@ class FormValidateModel extends Model return $result; } - /** - * @return array - */ - public function getFieldsValues() - { - $result = parent::rules(); - - foreach ($this->modelForm->fields() as $field) - { - if ($this->getAttribute($field->attribute)) - { - $result[$field->attribute] = [ - 'field' => $field, - 'value' => $this->getAttribute($field->attribute) - ]; - } - } - return $result; - } /** * @var array attribute values indexed by attribute names @@ -251,7 +232,7 @@ class FormValidateModel extends Model foreach ($this->modelForm->fields() as $field) { - $result[$field->attribute] = $field->label; + $result[$field->attribute] = $field->normalName(); } return $result;