field_name == 'field_showroom_localisation') { // dsm($entity); global $user; $user = user_load($user->uid); // Make sure the user object is fully loaded // dsm($user); if(isset($entity->field_showroom_localisation_loca[LANGUAGE_NONE])){ $user_showroom = $user->field_showroom[LANGUAGE_NONE][0]['tid']; // dsm($user_showroom); if(empty($entity->field_showroom_localisation_show)){ $entity->field_showroom_localisation_show[LANGUAGE_NONE] = []; } foreach ($entity->field_showroom_localisation_loca[LANGUAGE_NONE] as $i => $loca) { // if(empty($entity->field_showroom_localisation_show[LANGUAGE_NONE])){ $entity->field_showroom_localisation_show[LANGUAGE_NONE][] = array('tid'=>''); // } dsm($entity->field_showroom_localisation_show); if(!isset($entity->original->field_showroom_localisation_show[LANGUAGE_NONE][$i]['tid'])){ $tid = $user_showroom; }else{ $tid = $entity->original->field_showroom_localisation_show[LANGUAGE_NONE][$i]['tid']; } dsm($tid); $entity->field_showroom_localisation_show[LANGUAGE_NONE][$i]['tid'] = $tid; dsm($entity->field_showroom_localisation_show); } } } } // function materio_showroom_entity_load($entities, $type) { // dsm($type); // if($type == 'node'){ // dsm($entities); // } // foreach ($entities as $entity) { // $entity->foo = mymodule_add_something($entity, $type); // } // } // TODO: alter entity translation field permission with field_permission // __ __ _ _______ __ __ // / / ____ _________ _/ /_(_)___ ____ / ____(_)__ / /___/ / // / / / __ \/ ___/ __ `/ __/ / __ \/ __ \ / /_ / / _ \/ / __ / // / /___/ /_/ / /__/ /_/ / /_/ / /_/ / / / / / __/ / / __/ / /_/ / // /_____/\____/\___/\__,_/\__/_/\____/_/ /_/ /_/ /_/\___/_/\__,_/ // TODO: create own location field /** * Implements hook_field_info(). * * Provides the description of the field. */ function materio_showroom_field_info() { return array( // We name our field as the associative name of the array. 'field_materio_showroom_location' => array( 'label' => t('Showroom Location'), 'description' => t('Define material location by showroom'), 'default_widget' => 'materio_showroom_location_text', 'default_formatter' => 'materio_showroom_location_simple_text', ), ); // TODO: define in settings wich vocabulary is for showrooms } /** * Implements hook_field_validate(). * * This hook gives us a chance to validate content that's in our * field. We're really only interested in the $items parameter, since * it holds arrays representing content in the field we've defined. * We want to verify that the items only contain RGB hex values like * this: #RRGGBB. If the item validates, we do nothing. If it doesn't * validate, we add our own error notification to the $errors parameter. * * @see field_example_field_widget_error() */ function materio_showroom_field_validate($entity_type, $entity, $field, $instance, $langcode, $items, &$errors) { foreach ($items as $delta => $item) { // if (!empty($item['rgb'])) { // if (!preg_match('@^#[0-9a-f]{6}$@', $item['rgb'])) { // $errors[$field['field_name']][$langcode][$delta][] = array( // 'error' => 'field_example_invalid', // 'message' => t('Color must be in the HTML format #abcdef.'), // ); // } // } } } /** * Implements hook_field_is_empty(). * * hook_field_is_empty() is where Drupal asks us if this field is empty. * Return TRUE if it does not contain data, FALSE if it does. This lets * the form API flag an error when required fields are empty. */ function materio_showroom_field_is_empty($item, $field) { return empty($item['location']); } // ______ __ // / ____/___ _________ ___ ____ _/ /____ __________ // / /_ / __ \/ ___/ __ `__ \/ __ `/ __/ _ \/ ___/ ___/ // / __/ / /_/ / / / / / / / / /_/ / /_/ __/ / (__ ) // /_/ \____/_/ /_/ /_/ /_/\__,_/\__/\___/_/ /____/ /** * Implements hook_field_formatter_info(). * * We need to tell Drupal that we have two different types of formatters * for this field. One will change the text color, and the other will * change the background color. * * @see field_example_field_formatter_view() */ function materio_showroom_field_formatter_info() { return array( // This formatter just displays the hex value in the color indicated. 'materio_showroom_location_simple_text' => array( 'label' => t('Simple text-based formatter'), 'field types' => array('field_example_rgb'), ), // This formatter changes the background color of the content region. // 'field_example_color_background' => array( // 'label' => t('Change the background of the output text'), // 'field types' => array('field_example_rgb'), // ), ); } /** * Implements hook_field_formatter_view(). * * Two formatters are implemented. * - field_example_simple_text just outputs markup indicating the color that * was entered and uses an inline style to set the text color to that value. * - field_example_color_background does the same but also changes the * background color of div.region-content. * * @see field_example_field_formatter_info() */ function materio_showroom_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) { $element = array(); switch ($display['type']) { // This formatter simply outputs the field as text and with a color. case 'materio_showroom_location_simple_text': foreach ($items as $delta => $item) { $element[$delta] = array( // We create a render array to produce the desired markup, // "
The color code ... #hexcolor
". // See theme_html_tag(). '#type' => 'html_tag', '#tag' => 'p', // '#attributes' => array( // 'style' => 'color: ' . $item['rgb'], // ), '#value' => t('@loc', array('@loc' => $item['location'])), ); } break; // This formatter adds css to the page changing the '.region-content' area's // background color. If there are many fields, the last one will win. // case 'field_example_color_background': // foreach ($items as $delta => $item) { // $element[$delta] = array( // '#type' => 'html_tag', // '#tag' => 'p', // '#value' => t('The content area color has been changed to @code', array('@code' => $item['rgb'])), // '#attached' => array( // 'css' => array( // array( // 'data' => 'div.region-content { background-color:' . $item['rgb'] . ';}', // 'type' => 'inline', // ), // ), // ), // ); // } // break; } return $element; } // _ ___ __ __ // | | / (_)___/ /___ ____ / /______ // | | /| / / / __ / __ `/ _ \/ __/ ___/ // | |/ |/ / / /_/ / /_/ / __/ /_(__ ) // |__/|__/_/\__,_/\__, /\___/\__/____/ // /____/ /** * Implements hook_field_widget_info(). * * Three widgets are provided. * - A simple text-only widget where the user enters the '#ffffff'. * - A 3-textfield widget that gathers the red, green, and blue values * separately. * - A farbtastic colorpicker widget that chooses the value graphically. * * These widget types will eventually show up in hook_field_widget_form, * where we will have to flesh them out. * * @see field_example_field_widget_form() */ function materio_showroom_field_widget_info() { return array( 'materio_showroom_location_text' => array( 'label' => t('Location as text'), 'field types' => array('field_materio_showroom_location'), ), // 'field_example_3text' => array( // 'label' => t('RGB text field'), // 'field types' => array('field_example_rgb'), // ), // 'field_example_colorpicker' => array( // 'label' => t('Color Picker'), // 'field types' => array('field_example_rgb'), // ), ); } /** * Implements hook_field_widget_form(). * * hook_widget_form() is where Drupal tells us to create form elements for * our field's widget. * * We provide one of three different forms, depending on the widget type of * the Form API item provided. * * The 'field_example_colorpicker' and 'field_example_text' are essentially * the same, but field_example_colorpicker adds a javascript colorpicker * helper. * * field_example_3text displays three text fields, one each for red, green, * and blue. However, the field type defines a single text column, * rgb, which needs an HTML color spec. Define an element validate * handler that converts our r, g, and b fields into a simulated single * 'rgb' form element. */ function materio_showroom_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { $locval = isset($items[$delta]['location']) ? $items[$delta]['location'] : ''; global $user; $user = user_load($user->uid); // Make sure the user object is fully loaded // dsm($user, 'user'); $showroom_tid = $user->field_showroom[LANGUAGE_NONE][0]['tid']; // dsm($user_showroom); $showroom_term = taxonomy_term_load($showroom_tid); // dsm($showroom_term); $widget = $element; $widget['#delta'] = $delta; switch ($instance['widget']['type']) { // TODO: loop through showrooms and don't allow more than one field by show room case 'materio_showroom_location_text': $widget['showroom_tid'] = array( '#type' => 'hidden', '#default_value' => $showroom_tid, // Allow a slightly larger size that the field length to allow for some // configurations where all characters won't fit in input field. '#size' => 10, '#maxlength' => 10, ); $widget['location'] = array( '#type' => 'textfield', '#title' => $showroom_term->name, '#default_value' => $locval, // Allow a slightly larger size that the field length to allow for some // configurations where all characters won't fit in input field. '#size' => 10, '#maxlength' => 10, ); break; } $element['location'] = $widget; return $element; } /** * Validate the individual fields and then convert to RGB string. */ function materio_showroom_location_text_validate($element, &$form_state) { // @todo: Isn't there a better way to find out which element? // $delta = $element['#delta']; // $field = $form_state['field'][$element['#field_name']][$element['#language']]['field']; // $field_name = $field['field_name']; // if (isset($form_state['values'][$field_name][$element['#language']][$delta]['rgb'])) { // $values = $form_state['values'][$field_name][$element['#language']][$delta]['rgb']; // foreach (array('r', 'g', 'b') as $colorfield) { // $colorfield_value = hexdec($values[$colorfield]); // // If they left any empty, we'll set the value empty and quit. // if (strlen($values[$colorfield]) == 0) { // form_set_value($element, '', $form_state); // return; // } // // If they gave us anything that's not hex, reject it. // if ((strlen($values[$colorfield]) != 2) || $colorfield_value < 0 || $colorfield_value > 255) { // form_error($element[$colorfield], t("Saturation value must be a 2-digit hexadecimal value between 00 and ff.")); // } // } // // $value = sprintf('#%02s%02s%02s', $values['r'], $values['g'], $values['b']); // form_set_value($element, $value, $form_state); // } } /** * Implements hook_field_widget_error(). * * hook_field_widget_error() lets us figure out what to do with errors * we might have generated in hook_field_validate(). Generally, we'll just * call form_error(). * * @see field_example_field_validate() * @see form_error() */ function materio_showroom_field_widget_error($element, $error, $form, &$form_state) { switch ($error['error']) { case 'materio_showroom_invalid': form_error($element, $error['message']); break; } }