user_role_field.module 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. /**
  3. * Hook into field edit form, user registration form and profile2 forms.
  4. */
  5. function user_role_field_form_alter(&$form, $form_state, $form_id) {
  6. if (isset($form['instance']) && ($form['instance']['entity_type']['#value'] == 'user' || $form['instance']['entity_type']['#value'] == 'profile2') && $form_id == 'field_ui_field_edit_form' && isset($form['field'])) {
  7. module_load_include('inc', 'user_role_field', 'user_role_field.admin');
  8. return _user_role_field_field_settings_form_alter($form, $form_state, $form_id);
  9. }
  10. }
  11. /**
  12. * Custom permissions.
  13. */
  14. function user_role_field_permission() {
  15. return array(
  16. 'administer user field roles' => array(
  17. 'title' => t('Administer user field roles'),
  18. 'description' => t('Manage user field roles.'),
  19. ),
  20. );
  21. }
  22. function _user_role_field_roles($field) {
  23. return (isset($field['settings']['user_role_field']) && is_array($field['settings']['user_role_field']) ? array_filter($field['settings']['user_role_field']) : array());
  24. }
  25. /*
  26. * Make sure only appropriate roles have access
  27. */
  28. function user_role_field_field_access($op, $field, $obj_type, $object, $account) {
  29. // We only handle user fields and profile2 fields
  30. if (($obj_type != 'user') && ($obj_type != 'profile2'))
  31. return true;
  32. // Admin user can see all fields when creating a new user.
  33. if (arg(2) == 'create' && arg(0) == 'admin' && user_access ('administer permissions'))
  34. return true;
  35. // If the object type is profile2, we need to load the user owning profile2 object
  36. if ($obj_type == 'profile2' && !empty($object->uid))
  37. $object = user_load ($object->uid);
  38. // Ignore the request if roles have not been enabled for this field.
  39. $roles = _user_role_field_roles ($field);
  40. if (empty($roles)) {
  41. return true;
  42. }
  43. // If the user object doesn't have the roles property, we get here through
  44. // the views module for example. In that case we want the data to display.
  45. // To revisit in case there are other cases.
  46. if (!isset ($object->roles))
  47. return true;
  48. $matching_roles = array_intersect_key ($object->roles, $roles);
  49. return !empty ($matching_roles);
  50. }