added per user showroom location field access
This commit is contained in:
		| @@ -264,79 +264,110 @@ function materio_showroom_form_alter(&$form, &$form_state, $form_id) { | |||||||
|     // dsm($form, 'form'); |     // dsm($form, 'form'); | ||||||
|     // dsm($form_state, 'form_state'); |     // dsm($form_state, 'form_state'); | ||||||
|  |  | ||||||
|     // define some constants |     _materio_showroom_alter_location_field_form($form, $form_state, $form_id); | ||||||
|     $field_type = 'field_materio_showroom_location'; |   } | ||||||
|     $node = $form['#node']; | } | ||||||
|     $nodetype = $form['type']['#value']; |  | ||||||
|  |  | ||||||
|  | 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 |     // get all (probably one :p) showroom field instances from the current node | ||||||
|     $fieldsmap = field_info_field_map(); |     if ($field['type'] == $field_type | ||||||
|     $showroomfieldinstances = array(); |         && isset($field['bundles']['node']) | ||||||
|     foreach ($fieldsmap as $field_name => $field) { |         && in_array($nodetype, $field['bundles']['node'])) { | ||||||
|       // dsm($field,$field_name); |       $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)){ |   // if there is no showroom field instances do nothing | ||||||
|       // act on each field instance |   if(!empty($showroomfieldinstances)){ | ||||||
|       foreach ($showroomfieldinstances as $field_name) { |     // act on each field instance | ||||||
|         // retrive various field infos |     foreach ($showroomfieldinstances as $field_name) { | ||||||
|         $field_info = field_info_field($field_name); |       // retrive various field infos | ||||||
|         $field_instance = field_info_instance('node', $field_name, $nodetype); |       $field_info = field_info_field($field_name); | ||||||
|         // dsm($field_info, 'field_info'); |       $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']); |  | ||||||
|  |  | ||||||
|  |       // 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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Bachir Soussi Chiadmi
					Bachir Soussi Chiadmi