Commit 6d4ac288 by semenov

1

parent 2cd58c22
......@@ -20,7 +20,7 @@ return [
[
"label" => "Сообщения с форм",
"url" => ["form/admin-message"]
"url" => ["form/admin-form-send-message"]
],
]
......
......@@ -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
......@@ -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;
......
......@@ -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);");
......
......@@ -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}}");
......
......@@ -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
......@@ -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
......@@ -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);
}
......
......@@ -43,7 +43,9 @@ use common\models\User;
<? if (!$model->isNewRecord) : ?>
<?= $form->field($model, 'attribute')->textInput(); ?>
<?= $form->field($model, 'label')->textInput(); ?>
<?= $form->field($model, 'name')->textInput()->hint('В момент отправки данных формы, будет использоваться это название.'); ?>
<?= $form->field($model, 'label')->textInput()->hint('В момент отправки данных формы, будет использоваться это название.');; ?>
<?= $form->field($model, 'hint')->textInput(); ?>
<?= $form->field($model, 'rules')->widget(
\skeeks\widget\chosen\Chosen::className(),
......
......@@ -76,7 +76,7 @@ use common\models\User;
'sortable' => true,
'columns' => [
//['class' => 'yii\grid\SerialColumn'],
'attribute',
'name',
'label',
'hint',
],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment