summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/field/field.api.php6
-rw-r--r--modules/field/field.default.inc2
-rw-r--r--modules/field/field.form.inc2
-rw-r--r--modules/field/field.module10
4 files changed, 14 insertions, 6 deletions
diff --git a/modules/field/field.api.php b/modules/field/field.api.php
index 461789a1b..9e9924f9b 100644
--- a/modules/field/field.api.php
+++ b/modules/field/field.api.php
@@ -1433,11 +1433,15 @@ function hook_field_build_modes($obj_type) {
* - "view"
* @param $field
* The field on which the operation is to be performed.
+ * @param $obj_type
+ * The type of $object; e.g. 'node' or 'user'.
+ * @param $object
+ * (optional) The object for the operation.
* @param $account
* (optional) The account to check, if not given use currently logged in user.
* @return
* TRUE if the operation is allowed;
* FALSE if the operation is denied.
*/
-function hook_field_access($op, $field, $account) {
+function hook_field_access($op, $field, $obj_type, $object, $account) {
}
diff --git a/modules/field/field.default.inc b/modules/field/field.default.inc
index 50e71e30e..10f3f7bc1 100644
--- a/modules/field/field.default.inc
+++ b/modules/field/field.default.inc
@@ -84,7 +84,7 @@ function field_default_view($obj_type, $object, $field, $instance, $langcode, $i
'#theme' => 'field',
'#weight' => $display['weight'],
'#title' => check_plain(t($instance['label'])),
- '#access' => field_access('view', $field),
+ '#access' => field_access('view', $field, $obj_type, $object),
'#label_display' => $label_display,
'#build_mode' => $build_mode,
'#language' => $langcode,
diff --git a/modules/field/field.form.inc b/modules/field/field.form.inc
index 11b065df4..581869278 100644
--- a/modules/field/field.form.inc
+++ b/modules/field/field.form.inc
@@ -22,7 +22,7 @@ function field_default_form($obj_type, $object, $field, $instance, $langcode, $i
// If the field is not accessible, don't add anything. The field value will
// be left unchanged on update, or considered empty on insert (default value
// will be inserted if applicable).
- if (!field_access('edit', $field)) {
+ if (!field_access('edit', $field, $obj_type, $object)) {
return $addition;
}
diff --git a/modules/field/field.module b/modules/field/field.module
index 7ad0c50b9..080091b68 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -499,7 +499,7 @@ function field_format($obj_type, $object, $field, $item, $formatter_type = NULL,
$field = field_info_field($field);
}
- if (field_access('view', $field)) {
+ if (field_access('view', $field, $obj_type, $object)) {
$field_type = field_info_field_types($field['type']);
// We need $field, $instance, $obj_type, $object to be able to display a value...
@@ -624,20 +624,24 @@ function field_has_data($field) {
* - "view"
* @param $field
* The field on which the operation is to be performed.
+ * @param $obj_type
+ * The type of $object; e.g. 'node' or 'user'.
+ * @param $object
+ * (optional) The object for the operation.
* @param $account
* (optional) The account to check, if not given use currently logged in user.
* @return
* TRUE if the operation is allowed;
* FALSE if the operation is denied.
*/
-function field_access($op, $field, $account = NULL) {
+function field_access($op, $field, $obj_type, $object = NULL, $account = NULL) {
global $user;
if (is_null($account)) {
$account = $user;
}
- $field_access = module_invoke_all('field_access', $op, $field, $account);
+ $field_access = module_invoke_all('field_access', $op, $field, $obj_type, $object, $account);
foreach ($field_access as $value) {
if ($value === FALSE) {
return FALSE;