Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Open sidebar
project
drupal
Commits
ea1280d7
Commit
ea1280d7
authored
Oct 11, 2012
by
webchick
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Issue
#1805688
by fubhy: Added Support methods as #element_validate() callbacks.
parent
92a5b299
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
57 additions
and
39 deletions
+57
-39
core/includes/form.inc
core/includes/form.inc
+2
-2
core/modules/system/tests/modules/form_test/form_test.module
core/modules/system/tests/modules/form_test/form_test.module
+5
-37
core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Callbacks.php
...ests/modules/form_test/lib/Drupal/form_test/Callbacks.php
+50
-0
No files found.
core/includes/form.inc
View file @
ea1280d7
...
...
@@ -1422,8 +1422,8 @@ function _form_validate(&$elements, &$form_state, $form_id = NULL) {
// Call any element-specific validators. These must act on the element
// #value data.
elseif
(
isset
(
$elements
[
'#element_validate'
]))
{
foreach
(
$elements
[
'#element_validate'
]
as
$
function
)
{
$function
(
$elements
,
$form_state
,
$form_state
[
'complete_form'
]);
foreach
(
$elements
[
'#element_validate'
]
as
$
callback
)
{
call_user_func_array
(
$callback
,
array
(
&
$elements
,
&
$form_state
,
&
$form_state
[
'complete_form'
])
)
;
}
}
...
...
core/modules/system/tests/modules/form_test/form_test.module
View file @
ea1280d7
...
...
@@ -5,6 +5,8 @@
* Helper module for the form API tests.
*/
use
Drupal\form_test
\
Callbacks
;
/**
* Implements hook_menu().
*/
...
...
@@ -385,11 +387,13 @@ function system_form_form_test_alter_form_alter(&$form, &$form_state) {
* should be contained in the rebuilt form.
*/
function
form_test_validate_form
(
$form
,
&
$form_state
)
{
$object
=
new
Callbacks
();
$form
[
'name'
]
=
array
(
'#type'
=>
'textfield'
,
'#title'
=>
'Name'
,
'#default_value'
=>
''
,
'#element_validate'
=>
array
(
'form_test_element_
validate
_n
ame'
),
'#element_validate'
=>
array
(
array
(
$object
,
'
validate
N
ame'
)
)
,
);
$form
[
'submit'
]
=
array
(
'#type'
=>
'submit'
,
...
...
@@ -403,42 +407,6 @@ function form_test_validate_form($form, &$form_state) {
return
$form
;
}
/**
* Form element validation handler for 'name' in form_test_validate_form().
*/
function
form_test_element_validate_name
(
&
$element
,
&
$form_state
)
{
$triggered
=
FALSE
;
if
(
$form_state
[
'values'
][
'name'
]
==
'element_validate'
)
{
// Alter the form element.
$element
[
'#value'
]
=
'#value changed by #element_validate'
;
// Alter the submitted value in $form_state.
form_set_value
(
$element
,
'value changed by form_set_value() in #element_validate'
,
$form_state
);
$triggered
=
TRUE
;
}
if
(
$form_state
[
'values'
][
'name'
]
==
'element_validate_access'
)
{
$form_state
[
'storage'
][
'form_test_name'
]
=
$form_state
[
'values'
][
'name'
];
// Alter the form element.
$element
[
'#access'
]
=
FALSE
;
$triggered
=
TRUE
;
}
elseif
(
!
empty
(
$form_state
[
'storage'
][
'form_test_name'
]))
{
// To simplify this test, just take over the element's value into $form_state.
form_set_value
(
$element
,
$form_state
[
'storage'
][
'form_test_name'
],
$form_state
);
$triggered
=
TRUE
;
}
if
(
$triggered
)
{
// Output the element's value from $form_state.
drupal_set_message
(
t
(
'@label value: @value'
,
array
(
'@label'
=>
$element
[
'#title'
],
'@value'
=>
$form_state
[
'values'
][
'name'
])));
// Trigger a form validation error to see our changes.
form_set_error
(
''
);
}
}
/**
* Form validation handler for form_test_validate_form().
*/
...
...
core/modules/system/tests/modules/form_test/lib/Drupal/form_test/Callbacks.php
0 → 100644
View file @
ea1280d7
<?php
/**
* @file
* Definition of Drupal\form_test\Callbacks.
*/
namespace
Drupal\form_test
;
/**
* Simple class for testing methods as element validation callbacks.
*/
class
Callbacks
{
/**
* Form element validation handler for 'name' in form_test_validate_form().
*/
public
function
validateName
(
&
$element
,
&
$form_state
)
{
$triggered
=
FALSE
;
if
(
$form_state
[
'values'
][
'name'
]
==
'element_validate'
)
{
// Alter the form element.
$element
[
'#value'
]
=
'#value changed by #element_validate'
;
// Alter the submitted value in $form_state.
form_set_value
(
$element
,
'value changed by form_set_value() in #element_validate'
,
$form_state
);
$triggered
=
TRUE
;
}
if
(
$form_state
[
'values'
][
'name'
]
==
'element_validate_access'
)
{
$form_state
[
'storage'
][
'form_test_name'
]
=
$form_state
[
'values'
][
'name'
];
// Alter the form element.
$element
[
'#access'
]
=
FALSE
;
$triggered
=
TRUE
;
}
elseif
(
!
empty
(
$form_state
[
'storage'
][
'form_test_name'
]))
{
// To simplify this test, just take over the element's value into $form_state.
form_set_value
(
$element
,
$form_state
[
'storage'
][
'form_test_name'
],
$form_state
);
$triggered
=
TRUE
;
}
if
(
$triggered
)
{
// Output the element's value from $form_state.
drupal_set_message
(
t
(
'@label value: @value'
,
array
(
'@label'
=>
$element
[
'#title'
],
'@value'
=>
$form_state
[
'values'
][
'name'
])));
// Trigger a form validation error to see our changes.
form_set_error
(
''
);
}
}
}
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