Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
skeeks
/
cms-module-form
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Merge Requests
0
Pipelines
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
6d4ac288
authored
Mar 19, 2015
by
semenov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
2cd58c22
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
227 additions
and
22 deletions
+227
-22
config/admin/menu.php
+1
-1
controllers/AdminFormSendMessageController.php
+22
-0
controllers/BackendController.php
+16
-0
migrations/m150307_162735_create_form_field_table.php
+3
-0
migrations/m150307_162740_create_form_send_messages_table.php
+32
-2
models/FormField.php
+20
-2
models/FormSendMessage.php
+90
-5
models/FormValidateModel.php
+39
-10
views/admin-form-field/_form.php
+3
-1
views/admin-form/_form.php
+1
-1
No files found.
config/admin/menu.php
View file @
6d4ac288
...
...
@@ -20,7 +20,7 @@ return [
[
"label"
=>
"Сообщения с форм"
,
"url"
=>
[
"form/admin-message"
]
"url"
=>
[
"form/admin-
form-send-
message"
]
],
]
...
...
controllers/AdminFormSendMessageController.php
View file @
6d4ac288
...
...
@@ -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
controllers/BackendController.php
View file @
6d4ac288
...
...
@@ -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
())
{
//Все проверки прошли, формируем модель отправленного сообщения и сохраняем ее
$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
;
...
...
migrations/m150307_162735_create_form_field_table.php
View file @
6d4ac288
...
...
@@ -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);"
);
...
...
migrations/m150307_162740_create_form_send_messages_table.php
View file @
6d4ac288
...
...
@@ -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,12 +86,19 @@ 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}
}
"
);
...
...
models/FormField.php
View file @
6d4ac288
...
...
@@ -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
models/FormSendMessage.php
View file @
6d4ac288
...
...
@@ -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
models/FormValidateModel.php
View file @
6d4ac288
...
...
@@ -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,17 +122,11 @@ 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
;
}
}
}
/**
* PHP setter magic method.
...
...
@@ -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
);
}
...
...
views/admin-form-field/_form.php
View file @
6d4ac288
...
...
@@ -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
(),
...
...
views/admin-form/_form.php
View file @
6d4ac288
...
...
@@ -76,7 +76,7 @@ use common\models\User;
'sortable'
=>
true
,
'columns'
=>
[
//['class' => 'yii\grid\SerialColumn'],
'
attribut
e'
,
'
nam
e'
,
'label'
,
'hint'
,
],
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment