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
86e514c8
authored
Mar 18, 2015
by
semenov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1
parent
7139dcdc
Hide whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
281 additions
and
37 deletions
+281
-37
_vendor/YiiApplication.php
+0
-1
components/FormRegisteredElements.php
+8
-8
controllers/BackendController.php
+53
-0
elements/Base.php
+2
-7
elements/button/Button.php
+27
-0
elements/textarea/Textarea.php
+2
-0
models/Form.php
+4
-2
models/FormField.php
+108
-2
models/FormValidateModel.php
+18
-11
views/admin-form-field/_form.php
+7
-0
views/admin-form/_form.php
+10
-2
views/blank-form.php
+3
-3
widgets/ActiveForm.php
+38
-0
widgets/form/FormWidget.php
+1
-1
No files found.
_vendor/YiiApplication.php
View file @
86e514c8
...
...
@@ -13,7 +13,6 @@ use skeeks\modules\cms\form\components\FormRegisteredWidgets;
/**
*
* @property FormRegisteredElements $formRegisteredElements
* @property FormRegisteredWidgets $formRegisteredWidgets
*
* Class Application
* @package yii\web
...
...
components/FormRegisteredElements.php
View file @
86e514c8
...
...
@@ -12,34 +12,34 @@ use skeeks\cms\components\CollectionComponents;
use
skeeks\cms\components\RegisteredWidgets
;
use
skeeks\cms\models\StorageFile
;
use
skeeks\cms\models\WidgetDescriptor
;
use
skeeks\modules\cms\form\elements\Base
;
use
Yii
;
use
yii\base\Component
;
use
yii\helpers\ArrayHelper
;
use
yii\web\UploadedFile
;
/**
*
* @method WidgetDescriptor[] getComponents()
* @method WidgetDescriptor getComponent($id)
*
* Class RegisteredWidgets
* @package skeeks\cms\components
* Class FormRegisteredElements
* @package skeeks\modules\cms\form\components
*/
class
FormRegisteredElements
extends
RegisteredWidgets
{
public
function
baseElements
()
{
return
[
'skeeks\modules\cms\form\elements\textarea\Textarea'
=>
[
'name'
=>
'Текстовое поле (textarea)'
,
'description'
=>
''
,
],
'skeeks\modules\cms\form\elements\textInput\TextInput'
=>
[
'name'
=>
'Текстовый input (TextInput)'
,
],
'skeeks\modules\cms\form\elements\button\Button'
=>
[
'name'
=>
'Кнопка отправки формы'
,
'description'
=>
''
,
],
];
...
...
controllers/BackendController.php
View file @
86e514c8
...
...
@@ -7,14 +7,66 @@
*/
namespace
skeeks\modules\cms\form\controllers
;
use
skeeks\cms\base\Controller
;
use
skeeks\modules\cms\form\models\Form
;
use
yii\filters\VerbFilter
;
use
yii\helpers\ArrayHelper
;
use
yii\web\Response
;
use
yii\widgets\ActiveForm
;
/**
* Class BackendController
* @package skeeks\modules\cms\form\controllers
*/
class
BackendController
extends
Controller
{
/**
* @return array
*/
public
function
behaviors
()
{
return
ArrayHelper
::
merge
(
parent
::
behaviors
(),
[
'verbs'
=>
[
'class'
=>
VerbFilter
::
className
(),
'actions'
=>
[
'validate'
=>
[
'post'
],
'submit'
=>
[
'post'
],
],
],
]);
}
/**
* Процесс отправки формы
* @return array
*/
public
function
actionSubmit
()
{
}
/**
* Валидация данных с формы
* @return array
*/
public
function
actionValidate
()
{
if
(
\Yii
::
$app
->
request
->
isAjax
&&
!
\Yii
::
$app
->
request
->
isPjax
)
{
if
(
$formId
=
\Yii
::
$app
->
request
->
post
(
Form
::
FROM_PARAM_ID_NAME
))
{
/**
* @var $modelForm Form
*/
$modelForm
=
Form
::
find
()
->
where
([
'id'
=>
$formId
])
->
one
();
$model
=
$modelForm
->
createValidateModel
();
$model
->
load
(
\Yii
::
$app
->
request
->
post
());
\Yii
::
$app
->
response
->
format
=
Response
::
FORMAT_JSON
;
return
ActiveForm
::
validate
(
$model
);
}
}
}
}
\ No newline at end of file
elements/Base.php
View file @
86e514c8
...
...
@@ -9,14 +9,9 @@ namespace skeeks\modules\cms\form\elements;
use
skeeks\cms\base\Widget
;
abstract
class
Base
extends
Widget
class
Base
extends
Widget
{
/**
* @var bool Элемент или виджет
*/
public
$element
=
true
;
public
$elementCode
;
public
$elementCode
=
''
;
public
$value
;
public
$attributeClass
;
...
...
elements/button/Button.php
0 → 100644
View file @
86e514c8
<?php
/**
* @author Semenov Alexander <semenov@skeeks.com>
* @link http://skeeks.com/
* @copyright 2010 SkeekS (СкикС)
* @date 16.03.2015
*/
namespace
skeeks\modules\cms\form\elements\button
;
use
skeeks\cms\base\InputWidget
;
use
skeeks\cms\widgets\formInputs\storageFiles\Widget
;
use
skeeks\modules\cms\form\elements\Base
;
use
yii\helpers\Html
;
class
Button
extends
InputWidget
{
public
function
run
()
{
$submit
=
Html
::
submitButton
(
"Отправить"
,
[
'class'
=>
'btn btn-primary'
]);
return
Html
::
tag
(
'div'
,
$submit
,
[
'class'
=>
'form-group'
]
);
}
}
\ No newline at end of file
elements/textarea/Textarea.php
View file @
86e514c8
...
...
@@ -12,4 +12,5 @@ use skeeks\modules\cms\form\elements\Base;
class
Textarea
extends
Base
{
public
$elementCode
=
'textarea'
;
}
\ No newline at end of file
models/Form.php
View file @
86e514c8
...
...
@@ -22,6 +22,8 @@ use yii\web\ErrorHandler;
*/
class
Form
extends
Core
{
const
FROM_PARAM_ID_NAME
=
'sx-auto-form'
;
/**
* @inheritdoc
*/
...
...
@@ -130,7 +132,7 @@ class Form extends Core
public
function
createValidateModel
()
{
return
new
FormValidateModel
([
'
f
orm'
=>
$this
'
modelF
orm'
=>
$this
]);
}
...
...
@@ -172,7 +174,7 @@ class Form extends Core
}
catch
(
\Exception
$e
)
{
ob_end_clean
();
//
ErrorHandler::convertExceptionToError($e);
ErrorHandler
::
convertExceptionToError
(
$e
);
return
'Ошибка рендеринга формы: '
.
$e
->
getMessage
();
}
}
...
...
models/FormField.php
View file @
86e514c8
...
...
@@ -12,6 +12,11 @@ use skeeks\cms\models\behaviors\HasDescriptionsBehavior;
use
skeeks\cms\models\behaviors\HasStatus
;
use
skeeks\cms\models\behaviors\Implode
;
use
skeeks\cms\models\Core
;
use
skeeks\modules\cms\form\elements\Base
;
use
yii\base\Model
;
use
yii\helpers\ArrayHelper
;
use
yii\widgets\ActiveField
;
use
yii\widgets\ActiveForm
;
/**
* Class FormEmail
...
...
@@ -32,7 +37,25 @@ class FormField extends Core
*/
public
function
behaviors
()
{
return
array_merge
(
parent
::
behaviors
(),
[]);
return
ArrayHelper
::
merge
(
parent
::
behaviors
(),
[
Implode
::
className
()
=>
[
'class'
=>
Implode
::
className
(),
'fields'
=>
[
'rules'
]
]
]);
}
/**
* @return array
*/
static
public
function
availableRules
()
{
return
[
'required'
=>
'Обязательно к заполнению'
,
'email'
=>
'Проверка на email'
,
'integer'
=>
'Целое число'
];
}
/**
...
...
@@ -43,8 +66,9 @@ class FormField extends Core
return
array_merge
(
parent
::
rules
(),
[
[[
'created_by'
,
'updated_by'
,
'created_at'
,
'updated_at'
,
'form_id'
],
'integer'
],
[[
'hint'
],
'string'
],
[[
'element_config'
],
'safe'
],
[[
'priority'
],
'integer'
],
[[
'
widget'
,
'
rules'
],
'safe'
],
[[
'rules'
],
'safe'
],
[[
'form_id'
,
'element'
],
'required'
],
[
'attribute'
,
'default'
,
'value'
=>
function
(
FormField
$model
,
$attribute
)
{
...
...
@@ -97,4 +121,85 @@ class FormField extends Core
{
return
$this
->
findForm
()
->
one
();
}
/**
* @return \skeeks\cms\models\WidgetDescriptor
*/
public
function
elenentDescriptor
()
{
return
\Yii
::
$app
->
formRegisteredElements
->
getComponent
(
$this
->
element
);
}
/**
* @return array
*/
public
function
rulesForActiveForm
()
{
$result
=
[];
if
((
array
)
$this
->
rules
)
{
foreach
((
array
)
$this
->
rules
as
$ruleCode
)
{
$result
[]
=
[[
$this
->
attribute
],
$ruleCode
];
}
}
else
{
$result
[]
=
[[
$this
->
attribute
],
'safe'
];
}
return
$result
;
}
/**
* @param ActiveForm $activeForm
* @param Model $model
* @return mixed
*/
public
function
renderActiveForm
(
ActiveForm
$activeForm
,
Model
$model
)
{
if
(
$element
=
$this
->
elenentDescriptor
())
{
$elementConfig
=
(
array
)
$this
->
element_config
;
/**
* @var $field ActiveField
*/
$field
=
$activeForm
->
field
(
$model
,
$this
->
attribute
);
if
(
!
$field
)
{
return
''
;
}
//Элемент или виджет
if
(
is_subclass_of
(
$this
->
element
,
Base
::
className
()))
{
$element
=
new
$this
->
element
;
$field
->
{
$element
->
elementCode
}(
$elementConfig
);
}
else
{
$field
->
widget
(
$this
->
element
,
$elementConfig
);
}
if
(
$this
->
hint
)
{
$field
->
hint
((
string
)
$this
->
hint
);
}
if
(
$this
->
label
)
{
$field
->
label
(
$this
->
label
);
}
else
{
$field
->
label
(
false
);
}
return
$field
;
}
return
''
;
}
}
\ No newline at end of file
models/FormValidateModel.php
View file @
86e514c8
...
...
@@ -15,6 +15,7 @@ use skeeks\cms\models\Core;
use
yii\base\Exception
;
use
yii\base\InvalidConfigException
;
use
yii\base\Model
;
use
yii\helpers\ArrayHelper
;
use
yii\helpers\BaseHtml
;
/**
...
...
@@ -27,18 +28,18 @@ class FormValidateModel extends Model
/**
* @var Form
*/
public
$
f
orm
=
null
;
public
$
modelF
orm
=
null
;
public
function
init
()
{
parent
::
init
();
if
(
!
$this
->
f
orm
instanceof
Form
)
if
(
!
$this
->
modelF
orm
instanceof
Form
)
{
throw
new
InvalidConfigException
;
}
if
(
$fields
=
$this
->
f
orm
->
fields
())
if
(
$fields
=
$this
->
modelF
orm
->
fields
())
{
foreach
(
$fields
as
$field
)
{
...
...
@@ -52,8 +53,21 @@ class FormValidateModel extends Model
* @var array attribute values indexed by attribute names
*/
private
$_attributes
=
[];
private
$_related
=
[];
public
function
rules
()
{
$result
=
parent
::
rules
();
foreach
(
$this
->
modelForm
->
fields
()
as
$field
)
{
$result
=
ArrayHelper
::
merge
(
$result
,
$field
->
rulesForActiveForm
());
}
return
$result
;
}
/**
* PHP getter magic method.
...
...
@@ -188,13 +202,6 @@ class FormValidateModel extends Model
/**
* @inheritdoc
*/
public
function
rules
()
{
return
array_merge
(
parent
::
rules
());
}
/*public function scenarios()
{
...
...
@@ -213,7 +220,7 @@ class FormValidateModel extends Model
{
$result
=
[];
foreach
(
$this
->
f
orm
->
fields
()
as
$field
)
foreach
(
$this
->
modelF
orm
->
fields
()
as
$field
)
{
$result
[
$field
->
attribute
]
=
$field
->
label
;
}
...
...
views/admin-form-field/_form.php
View file @
86e514c8
...
...
@@ -45,6 +45,13 @@ use common\models\User;
<?=
$form
->
field
(
$model
,
'attribute'
)
->
textInput
();
?>
<?=
$form
->
field
(
$model
,
'label'
)
->
textInput
();
?>
<?=
$form
->
field
(
$model
,
'hint'
)
->
textInput
();
?>
<?=
$form
->
field
(
$model
,
'rules'
)
->
widget
(
\skeeks\widget\chosen\Chosen
::
className
(),
[
'items'
=>
\skeeks\modules\cms\form\models\FormField
::
availableRules
(),
'multiple'
=>
true
]
);
?>
<?
endif
;
?>
...
...
views/admin-form/_form.php
View file @
86e514c8
...
...
@@ -89,4 +89,13 @@ use common\models\User;
<?=
$form
->
buttonsCreateOrUpdate
(
$model
);
?>
<?php
ActiveForm
::
end
();
?>
<?=
$model
->
render
();
?>
\ No newline at end of file
<div
class=
"row"
>
<div
class=
"col-md-12"
>
<div
class=
""
style=
"border: 1px solid rgba(32, 168, 216, 0.23); padding: 10px; margin-top: 10px;"
>
<h2>
Вот так будет выглядеть форма:
</h2>
<hr
/>
<?=
$model
->
render
();
?>
</div>
</div>
</div>
views/blank-form.php
View file @
86e514c8
...
...
@@ -8,15 +8,15 @@
* @var $formField \skeeks\modules\cms\form\models\FormField
* @var $model \skeeks\modules\cms\form\models\FormValidateModel
*/
use
\skeeks\cms\base
\widgets\ActiveForm
;
use
skeeks\modules\cms\form
\widgets\ActiveForm
;
?>
<?php
$form
=
ActiveForm
::
begin
([
'
id'
=>
'sx_form_'
.
$model
->
form
->
id
,
'
modelForm'
=>
$model
->
modelForm
,
]);
?>
<?
if
(
$fields
)
:
?>
<?
foreach
(
$fields
as
$formField
)
:
?>
<?=
$form
->
field
(
$model
,
$formField
->
attribute
)
->
textInput
();
?>
<?=
$form
Field
->
renderActiveForm
(
$form
,
$model
)
?>
<?
endforeach
;
?>
<?
endif
;
?>
...
...
widgets/ActiveForm.php
0 → 100644
View file @
86e514c8
<?php
/**
* @author Semenov Alexander <semenov@skeeks.com>
* @link http://skeeks.com/
* @copyright 2010 SkeekS (СкикС)
* @date 18.03.2015
*/
namespace
skeeks\modules\cms\form\widgets
;
use
skeeks\modules\cms\form\models\Form
;
/**
* Class ActiveForm
* @package skeeks\modules\cms\form\widgets
*/
class
ActiveForm
extends
\skeeks\cms\base\widgets\ActiveForm
{
/**
* @var Form
*/
public
$modelForm
;
public
function
__construct
(
$config
=
[])
{
$this
->
validationUrl
=
\skeeks\cms\helpers\UrlHelper
::
construct
(
'form/backend/validate'
)
->
toString
();
$this
->
action
=
\skeeks\cms\helpers\UrlHelper
::
construct
(
'form/backend/submit'
)
->
toString
();
$this
->
enableAjaxValidation
=
true
;
parent
::
__construct
(
$config
);
}
public
function
init
()
{
parent
::
init
();
echo
\yii\helpers\Html
::
hiddenInput
(
Form
::
FROM_PARAM_ID_NAME
,
$this
->
modelForm
->
id
);
}
}
widgets/form/FormWidget.php
View file @
86e514c8
...
...
@@ -56,7 +56,7 @@ class FormWidget extends Widget
$formModel
=
Form
::
find
()
->
where
([
'id'
=>
$this
->
form_id
])
->
one
();
if
(
$formModel
)
{
return
$formModel
->
render
();
}
return
''
;
...
...
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