added per user showroom location field access

This commit is contained in:
Bachir Soussi Chiadmi 2016-11-27 12:27:57 +01:00
parent 1ccc5d07d6
commit 5423f6d3bc

View File

@ -264,79 +264,110 @@ function materio_showroom_form_alter(&$form, &$form_state, $form_id) {
// dsm($form, 'form');
// dsm($form_state, 'form_state');
// define some constants
$field_type = 'field_materio_showroom_location';
$node = $form['#node'];
$nodetype = $form['type']['#value'];
_materio_showroom_alter_location_field_form($form, $form_state, $form_id);
}
}
function _materio_showroom_alter_location_field_form(&$form, &$form_state, $form_id){
// define some constants
$field_type = 'field_materio_showroom_location';
$node = $form['#node'];
$nodetype = $form['type']['#value'];
global $user;
$user = user_load($user->uid); // Make sure the user object is fully loaded
// dsm($user, 'user');
$fieldsmap = field_info_field_map();
$showroomfieldinstances = array();
$user_termref_field_instances = array();
foreach ($fieldsmap as $field_name => $field) {
// dsm($field,$field_name);
// get all (probably one :p) showroom field instances from the current node
$fieldsmap = field_info_field_map();
$showroomfieldinstances = array();
foreach ($fieldsmap as $field_name => $field) {
// dsm($field,$field_name);
if ($field['type'] == $field_type
&& isset($field['bundles']['node'])
&& in_array($nodetype, $field['bundles']['node'])) {
$showroomfieldinstances[] = $field_name;
}
if ($field['type'] == $field_type
&& isset($field['bundles']['node'])
&& in_array($nodetype, $field['bundles']['node'])) {
$showroomfieldinstances[] = $field_name;
}
// dsm($showroomfieldinstances, 'showroomfieldinstances');
// get all term reference fields instance from users
if (isset($field['bundles']['user'])
&& $field['type'] == 'taxonomy_term_reference') {
$field_info = field_info_field($field_name);
// dsm($field_info, "field_info");
$user_termref_field_instances[$field_info['settings']['allowed_values'][0]['vocabulary']] = $field_name;
}
}
// dsm($showroomfieldinstances, 'showroomfieldinstances');
// dsm($user_termref_field_instances, 'user_termref_field_instances');
if(!empty($showroomfieldinstances)){
// act on each field instance
foreach ($showroomfieldinstances as $field_name) {
// retrive various field infos
$field_info = field_info_field($field_name);
$field_instance = field_info_instance('node', $field_name, $nodetype);
// dsm($field_info, 'field_info');
// get all terms from chosen vocabulary in field instance widget settings
$vid = $field_instance['widget']['settings']['vocabulary'];
$tree = taxonomy_get_tree($vid);
foreach ($tree as $key => $term) {
$terms[$term->tid] = $term->name;
}
// dsm($terms, 'terms');
// get already recorded values
$old_items = field_get_items('node', $node, $field_name);
foreach ($old_items as $i => $value) {
$values[$value['showroom_tid']] = $value['location'];
}
// dsm($values, 'values');
// build new item list
foreach ($terms as $tid => $name) {
$items[] = array(
'showroom_tid' => $tid,
'location' => isset($values[$tid]) ? $values[$tid] : ''
);
}
// dsm($items, 'items');
// retrieve new field form with our custom items
$new_field_form = field_default_form('node', $node, $field_info, $field_instance, LANGUAGE_NONE, $items, $form, $form_state);
//dsm($new_field_form, 'default_form');
// change items location field title
$i = 0;
foreach ($terms as $tid => $name) {
$item = $new_field_form[$field_name][LANGUAGE_NONE][$i];
$new_field_form[$field_name][LANGUAGE_NONE][$i]['location']['#title'] = $terms[$item['showroom_tid']['#default_value']];
$i++;
}
// remove the last one more item added by default
unset($new_field_form[$field_name][LANGUAGE_NONE][$i]);
// delete normal field form and replace it with our new custom field form
unset($form[$field_name]);
$form[$field_name] = $new_field_form[$field_name];
// remove "add more" button
unset($form[$field_name]['und']['add_more']);
// if there is no showroom field instances do nothing
if(!empty($showroomfieldinstances)){
// act on each field instance
foreach ($showroomfieldinstances as $field_name) {
// retrive various field infos
$field_info = field_info_field($field_name);
$field_instance = field_info_instance('node', $field_name, $nodetype);
// dsm($field_info, 'field_info');
// get all terms from chosen vocabulary in field instance widget settings
$vid = $field_instance['widget']['settings']['vocabulary'];
$voc = taxonomy_vocabulary_load($vid);
$tree = taxonomy_get_tree($vid);
foreach ($tree as $key => $term) {
$terms[$term->tid] = $term->name;
}
// dsm($terms, 'terms');
// get user own term for current vocabulary (if any)
if(isset($user_termref_field_instances[$voc->machine_name])){
$user_field_name = $user_termref_field_instances[$voc->machine_name];
foreach (field_get_items('user', $user, $user_field_name) as $key => $value) {
$user_showrooms[] = $value['tid'];
}
// dsm($user_showrooms, "user_showrooms");
}
// get already recorded values
$old_items = field_get_items('node', $node, $field_name);
foreach ($old_items as $i => $value) {
$values[$value['showroom_tid']] = $value['location'];
}
// dsm($values, 'values');
// build new item list
foreach ($terms as $tid => $name) {
$items[] = array(
'showroom_tid' => $tid,
'location' => isset($values[$tid]) ? $values[$tid] : ''
);
}
// dsm($items, 'items');
// retrieve new field form with our custom items
$new_field_form = field_default_form('node', $node, $field_info, $field_instance, LANGUAGE_NONE, $items, $form, $form_state);
// dsm($new_field_form, 'default_form');
// change items location field title
// and check access comparing term id with user taged with
$i = 0;
foreach ($terms as $tid => $name) {
$item = $new_field_form[$field_name][LANGUAGE_NONE][$i];
$new_field_form[$field_name][LANGUAGE_NONE][$i]['location']['#title'] = $terms[$item['showroom_tid']['#default_value']];
$new_field_form[$field_name][LANGUAGE_NONE][$i]['location']['#disabled'] = !in_array($tid, $user_showrooms);
$i++;
}
// remove the last one more item added by default
unset($new_field_form[$field_name][LANGUAGE_NONE][$i]);
// delete normal field form and replace it with our new custom field form
unset($form[$field_name]);
$form[$field_name] = $new_field_form[$field_name];
// remove "add more" button
unset($form[$field_name]['und']['add_more']);
}
}
}
// TODO: migrate old location field to new one