From 6d4ac288ea584646d77bdb4d0f390763b9ac8b46 Mon Sep 17 00:00:00 2001 From: Semenov Date: Thu, 19 Mar 2015 16:44:44 +0300 Subject: [PATCH] 1 --- config/admin/menu.php | 2 +- controllers/AdminFormSendMessageController.php | 21 +++++++++++++++++++++ controllers/BackendController.php | 20 ++++++++++++++++++-- migrations/m150307_162735_create_form_field_table.php | 3 +++ migrations/m150307_162740_create_form_send_messages_table.php | 36 +++++++++++++++++++++++++++++++++--- models/FormField.php | 21 +++++++++++++++++++-- models/FormSendMessage.php | 94 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- models/FormValidateModel.php | 51 ++++++++++++++++++++++++++++++++++++++++----------- views/admin-form-field/_form.php | 4 +++- views/admin-form/_form.php | 2 +- 10 files changed, 228 insertions(+), 26 deletions(-) diff --git a/config/admin/menu.php b/config/admin/menu.php index 29dddc7..2c24d5b 100644 --- a/config/admin/menu.php +++ b/config/admin/menu.php @@ -20,7 +20,7 @@ return [ [ "label" => "Сообщения с форм", - "url" => ["form/admin-message"] + "url" => ["form/admin-form-send-message"] ], ] diff --git a/controllers/AdminFormSendMessageController.php b/controllers/AdminFormSendMessageController.php index feb1f09..9c605e2 100644 --- a/controllers/AdminFormSendMessageController.php +++ b/controllers/AdminFormSendMessageController.php @@ -26,8 +26,29 @@ class AdminFormSendMessageController extends AdminModelEditorSmartController $this->_label = "Сообщения с форм"; $this->_modelShowAttribute = "id"; $this->_modelClassName = FormSendMessage::className(); + $this->modelValidate = true; $this->enableScenarios = true; + + $this->gridColumns = [ + 'form_id', + ['class' => \skeeks\cms\grid\CreatedAtColumn::className()], + ['class' => \skeeks\cms\grid\CreatedByColumn::className()] + ]; + parent::init(); } + + + /** + * @return array + */ + public function behaviors() + { + $behaviors = parent::behaviors(); + + unset($behaviors[self::BEHAVIOR_ACTION_MANAGER]['actions']['create']); + + return $behaviors; + } } \ No newline at end of file diff --git a/controllers/BackendController.php b/controllers/BackendController.php index b758c84..d67c3aa 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\FormSendMessage; use yii\filters\VerbFilter; use yii\helpers\ArrayHelper; use yii\web\Response; @@ -63,8 +64,23 @@ class BackendController extends Controller if ($model->load(\Yii::$app->request->post()) && $model->validate()) { - $response['success'] = true; - $response['message'] = 'Успешно отправлена'; + //Все проверки прошли, формируем модель отправленного сообщения и сохраняем ее + $modelFormSendMessage = new FormSendMessage(); + + + + $modelFormSendMessage->data = $model->getValues(); + $modelFormSendMessage->page_url = \Yii::$app->request->referrer; + $modelFormSendMessage->form_id = $formId; + + if ($modelFormSendMessage->save()) + { + $response['success'] = true; + $response['message'] = 'Успешно отправлена'; + } else + { + $response['message'] = 'Не удалось сохранить сообщение в базу'; + } } return $response; diff --git a/migrations/m150307_162735_create_form_field_table.php b/migrations/m150307_162735_create_form_field_table.php index b889f54..2462ea3 100644 --- a/migrations/m150307_162735_create_form_field_table.php +++ b/migrations/m150307_162735_create_form_field_table.php @@ -32,6 +32,8 @@ class m150307_162735_create_form_field_table extends Migration 'created_at' => Schema::TYPE_INTEGER . ' NULL', 'updated_at' => Schema::TYPE_INTEGER . ' NULL', + 'name' => Schema::TYPE_STRING . '(255) NULL', + 'label' => Schema::TYPE_STRING . '(255) NULL', 'hint' => Schema::TYPE_TEXT . ' NULL', @@ -53,6 +55,7 @@ class m150307_162735_create_form_field_table extends Migration $this->execute("ALTER TABLE {{%form_field}} ADD INDEX(created_at);"); $this->execute("ALTER TABLE {{%form_field}} ADD INDEX(updated_at);"); + $this->execute("ALTER TABLE {{%form_field}} ADD INDEX(name);"); $this->execute("ALTER TABLE {{%form_field}} ADD INDEX(label);"); $this->execute("ALTER TABLE {{%form_field}} ADD INDEX(element);"); $this->execute("ALTER TABLE {{%form_field}} ADD INDEX(priority);"); diff --git a/migrations/m150307_162740_create_form_send_messages_table.php b/migrations/m150307_162740_create_form_send_messages_table.php index b40da9a..e48fa42 100644 --- a/migrations/m150307_162740_create_form_send_messages_table.php +++ b/migrations/m150307_162740_create_form_send_messages_table.php @@ -32,11 +32,30 @@ class m150307_162740_create_form_send_messages_table extends Migration 'created_at' => Schema::TYPE_INTEGER . ' NULL', 'updated_at' => Schema::TYPE_INTEGER . ' NULL', - 'data' => Schema::TYPE_TEXT . ' NULL', - 'additional_data' => Schema::TYPE_TEXT . ' NULL', + 'processed_by' => Schema::TYPE_INTEGER . ' NULL', //пользователь который принял заявку + + 'data' => Schema::TYPE_TEXT . ' NULL', //Данные с формы в серилизованном виде + + 'emails' => Schema::TYPE_TEXT . ' NULL', //email на которые были отправлены уведомления + 'phones' => Schema::TYPE_TEXT . ' NULL', //Телефоны на которые были отправлены уведомления + + 'email_message' => Schema::TYPE_TEXT . ' NULL', //Телефоны на которые были отправлены уведомления + 'phone_message' => Schema::TYPE_TEXT . ' NULL', //Телефоны на которые были отправлены уведомления + + 'status' => Schema::TYPE_SMALLINT . ' NOT NULL DEFAULT 10', //статус, активна некативна, удалено 'form_id' => Schema::TYPE_INTEGER . '(255) NULL', + 'ip' => Schema::TYPE_STRING . '(32) NULL', + 'page_url' => Schema::TYPE_STRING . '(500) NULL', + + 'data_server' => Schema::TYPE_TEXT . ' NULL', + 'data_session' => Schema::TYPE_TEXT . ' NULL', + 'data_cookie' => Schema::TYPE_TEXT . ' NULL', + 'data_request' => Schema::TYPE_TEXT . ' NULL', + 'additional_data' => Schema::TYPE_TEXT . ' NULL', + + ], $tableOptions); $this->execute("ALTER TABLE {{%form_send_message}} ADD INDEX(updated_by);"); @@ -46,6 +65,10 @@ class m150307_162740_create_form_send_messages_table extends Migration $this->execute("ALTER TABLE {{%form_send_message}} ADD INDEX(updated_at);"); $this->execute("ALTER TABLE {{%form_send_message}} ADD INDEX(form_id);"); + $this->execute("ALTER TABLE {{%form_send_message}} ADD INDEX(processed_by);"); + $this->execute("ALTER TABLE {{%form_send_message}} ADD INDEX(status);"); + $this->execute("ALTER TABLE {{%form_send_message}} ADD INDEX(ip);"); + $this->execute("ALTER TABLE {{%form_send_message}} ADD INDEX(page_url);"); $this->execute("ALTER TABLE {{%form_send_message}} COMMENT = 'Сообщения с форм';"); @@ -63,13 +86,20 @@ class m150307_162740_create_form_send_messages_table extends Migration 'form_send_message_form_id', "{{%form_send_message}}", 'form_id', '{{%form_form}}', 'id', 'SET NULL', 'SET NULL' ); + + + $this->addForeignKey( + 'form_send_message_processed_by', "{{%form_send_message}}", + 'processed_by', '{{%cms_user}}', 'id', 'SET NULL', 'SET NULL' + ); } public function down() { $this->dropForeignKey("form_send_message_created_by", "{{%form_send_message}}"); $this->dropForeignKey("form_send_message_updated_by", "{{%form_send_message}}"); - + $this->dropForeignKey("form_send_message_processed_by", "{{%form_send_message}}"); + $this->dropForeignKey("form_send_message_form_id", "{{%form_send_message}}"); $this->dropTable("{{%form_send_message}}"); diff --git a/models/FormField.php b/models/FormField.php index ec9a015..2eb59e8 100644 --- a/models/FormField.php +++ b/models/FormField.php @@ -70,11 +70,21 @@ class FormField extends Core [['priority'], 'integer'], [['rules'], 'safe'], [[ 'form_id', 'element'], 'required'], + ['attribute', 'default', 'value' => function(FormField $model, $attribute) { return "sx_field_" . md5(rand(1, 10) . time()); }], - [['label', 'attribute'], 'string', 'max' => 255], + + ['name', 'default', 'value' => function(FormField $model, $attribute) + { + if (!$model->$attribute) + { + return $model->label; + } + }], + + [['label', 'attribute', 'name'], 'string', 'max' => 255], [['attribute', 'form_id'], 'unique', 'targetAttribute' => ['attribute', 'form_id'], 'message' => 'Этот элемент уже привязан к форме'] ]); @@ -102,7 +112,8 @@ class FormField extends Core 'form_id' => \Yii::t('app', 'Форма'), 'attribute' => \Yii::t('app', 'Уникальный код (необязательно)'), 'hint' => \Yii::t('app', 'Небольшая подсказка элемента'), - 'label' => \Yii::t('app', 'Название'), + 'name' => \Yii::t('app', 'Название'), + 'label' => \Yii::t('app', 'Label элемента'), ]); } @@ -202,4 +213,10 @@ class FormField extends Core return ''; } + + + public function normalName() + { + return $this-> + } } \ No newline at end of file diff --git a/models/FormSendMessage.php b/models/FormSendMessage.php index afd2ef1..176dc9e 100644 --- a/models/FormSendMessage.php +++ b/models/FormSendMessage.php @@ -8,14 +8,41 @@ namespace skeeks\modules\cms\form\models; use skeeks\cms\base\db\ActiveRecord; +use skeeks\cms\helpers\Request; use skeeks\cms\models\behaviors\HasDescriptionsBehavior; +use skeeks\cms\models\behaviors\HasJsonFieldsBehavior; use skeeks\cms\models\behaviors\HasStatus; use skeeks\cms\models\behaviors\Implode; +use skeeks\cms\models\behaviors\Serialize; use skeeks\cms\models\Core; /** - * Class FormSendMessage - * @package skeeks\modules\cms\form\models + * This is the model class for table "{{%form_send_message}}". + * + * @property integer $id + * @property integer $created_by + * @property integer $updated_by + * @property integer $created_at + * @property integer $updated_at + * @property integer $processed_by + * @property string $data + * @property string $emails + * @property string $phones + * @property string $email_message + * @property string $phone_message + * @property integer $status + * @property integer $form_id + * @property string $ip + * @property string $page_url + * @property string $data_server + * @property string $data_session + * @property string $data_cookie + * @property string $additional_data + * + * @property CmsUser $processedBy + * @property CmsUser $createdBy + * @property FormForm $form + * @property CmsUser $updatedBy */ class FormSendMessage extends Core { @@ -32,7 +59,20 @@ class FormSendMessage extends Core */ public function behaviors() { - return array_merge(parent::behaviors(), []); + return array_merge(parent::behaviors(), [ + + Serialize::className() => + [ + 'class' => Serialize::className(), + 'fields' => ['data', 'data_server', 'data_session', 'data_cookie', 'additional_data', 'data_request'] + ], + + Implode::className() => + [ + 'class' => Implode::className(), + 'fields' => ['emails', 'phones'] + ] + ]); } /** @@ -41,8 +81,37 @@ class FormSendMessage extends Core public function rules() { return array_merge(parent::rules(), [ - [['created_by', 'updated_by', 'created_at', 'updated_at', 'form_id'], 'integer'], - [['data', 'additional_data'], 'string'] + [['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'], + [['ip'], 'string', 'max' => 32], + [['page_url'], 'string', 'max' => 500], + [['form_id'], 'required'], + + ['data_request', 'default', 'value' => function(FormSendMessage $model, $attribute) + { + return $_REQUEST; + }], + + ['data_server', 'default', 'value' => function(FormSendMessage $model, $attribute) + { + return $_SERVER; + }], + + ['data_cookie', 'default', 'value' => function(FormSendMessage $model, $attribute) + { + return $_COOKIE; + }], + + ['data_session', 'default', 'value' => function(FormSendMessage $model, $attribute) + { + \Yii::$app->session->open(); + return $_SESSION; + }], + + ['ip', 'default', 'value' => function(FormSendMessage $model, $attribute) + { + return Request::getRealUserIp(); + }], ]); } @@ -68,4 +137,19 @@ class FormSendMessage extends Core ]); } + /** + * @return \yii\db\ActiveQuery + */ + public function getProcessedBy() + { + return $this->hasOne(CmsUser::className(), ['id' => 'processed_by']); + } + + /** + * @return \yii\db\ActiveQuery + */ + public function getForm() + { + return $this->hasOne(FormForm::className(), ['id' => 'form_id']); + } } \ No newline at end of file diff --git a/models/FormValidateModel.php b/models/FormValidateModel.php index f1ba036..b21a6f6 100644 --- a/models/FormValidateModel.php +++ b/models/FormValidateModel.php @@ -50,10 +50,47 @@ class FormValidateModel extends Model /** + * @return array + */ + public function getValues() + { + $result = parent::rules(); + + foreach ($this->modelForm->fields() as $field) + { + if ($this->getAttribute($field->attribute)) + { + $result[$field->attribute] = $this->getAttribute($field->attribute); + } + } + + 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 */ private $_attributes = []; - private $_related = []; public function rules() @@ -85,15 +122,9 @@ class FormValidateModel extends Model } elseif ($this->hasAttribute($name)) { return null; } else { - if (isset($this->_related[$name]) || array_key_exists($name, $this->_related)) { - return $this->_related[$name]; - } + $value = parent::__get($name); - if ($value instanceof ActiveQueryInterface) { - return $this->_related[$name] = $value->findFor($name, $this); - } else { - return $value; - } + return $value; } } @@ -137,8 +168,6 @@ class FormValidateModel extends Model { if ($this->hasAttribute($name)) { unset($this->_attributes[$name]); - } elseif (array_key_exists($name, $this->_related)) { - unset($this->_related[$name]); } elseif ($this->getRelation($name, false) === null) { parent::__unset($name); } diff --git a/views/admin-form-field/_form.php b/views/admin-form-field/_form.php index 2a8cc8f..a780eea 100644 --- a/views/admin-form-field/_form.php +++ b/views/admin-form-field/_form.php @@ -43,7 +43,9 @@ use common\models\User; isNewRecord) : ?> field($model, 'attribute')->textInput(); ?> - field($model, 'label')->textInput(); ?> + + field($model, 'name')->textInput()->hint('В момент отправки данных формы, будет использоваться это название.'); ?> + field($model, 'label')->textInput()->hint('В момент отправки данных формы, будет использоваться это название.');; ?> field($model, 'hint')->textInput(); ?> field($model, 'rules')->widget( \skeeks\widget\chosen\Chosen::className(), diff --git a/views/admin-form/_form.php b/views/admin-form/_form.php index 689b72a..d786734 100644 --- a/views/admin-form/_form.php +++ b/views/admin-form/_form.php @@ -76,7 +76,7 @@ use common\models\User; 'sortable' => true, 'columns' => [ //['class' => 'yii\grid\SerialColumn'], - 'attribute', + 'name', 'label', 'hint', ], -- libgit2 0.26.0