function _taxonomy_access_field_validate in Taxonomy Access Control 7
Validates form submissions of taxonomy fields for create grants.
@todo Use field label and term names in errors rather than field name and tids.
See also
http://drupal.org/node/1220212
Related topics
1 call to _taxonomy_access_field_validate()
File
- ./
taxonomy_access.create.inc, line 614 - Implements the Add Tag (create) grant on editing forms.
Code
function _taxonomy_access_field_validate($entity_type, $entity, &$errors) {
// Check for a pre-existing entity (i.e., the entity is being updated).
$old_fields = FALSE;
// The entity is actually a "pseudo-entity," and the user profile form
// neglects to include the uid. So, we need to load it manually.
if ($entity_type == 'user') {
// Some modules which extend the user profile form cause additional
// validation to happen with "pseudo-entities" that do not include the
// name. So, check if it exists.
if (isset($entity->name)) {
if ($account = user_load_by_name($entity->name)) {
$entity->uid = $account->uid;
}
}
}
list($entity_id, , $bundle) = entity_extract_ids($entity_type, $entity);
if ($entity_id) {
// Load the entity.
$old_entity = entity_load($entity_type, array(
$entity_id,
));
$old_entity = $old_entity[$entity_id];
// Fetch the original entity's taxonomy fields.
$old_fields = _taxonomy_access_entity_fields($entity_type, $old_entity, $bundle);
}
// Fetch the updated entity's taxonomy fields.
$new_fields = _taxonomy_access_entity_fields($entity_type, $entity, $bundle);
// Set errors if there are any disallowed changes.
$changes = _taxonomy_access_compare_fields($new_fields, $old_fields);
// We care about the overall value list, so delta is not important.
$delta = 0;
// Check each field and langcode for disallowed changes.
foreach ($changes as $field_name => $langcodes) {
foreach ($langcodes as $langcode => $disallowed) {
if ($disallowed) {
if (!empty($disallowed['added'])) {
$text = 'You may not add the following tags to %field: %tids';
$errors[$field_name][$langcode][$delta][] = array(
'error' => 'taxonomy_access_disallowed_added',
'message' => t($text, array(
'%field' => $field_name,
'%tids' => implode(', ', $disallowed['added']),
)),
);
}
if (!empty($disallowed['removed'])) {
$text = 'You may not remove the following tags from %field: %tids';
$errors[$field_name][$langcode][$delta][] = array(
'error' => 'taxonomy_access_disallowed_removed',
'message' => t($text, array(
'%field' => $field_name,
'%tids' => implode(', ', $disallowed['removed']),
)),
);
}
}
}
}
}